Метод FromException
Task.FromException помечает задачу
как сбойную. await пробрасывает
исходное исключение, а
Result
и
Wait
- AggregateException. Успех -
FromResult.
Синтаксис
Task task = Task.FromException(ex);
Task<T> task = Task.FromException<T>(ex);
Пример
Давайте проверим IsFaulted:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var task = Task.FromException(
new InvalidOperationException("abcde"));
await Task.Yield();
bool res = task.IsFaulted;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте поймаем исключение через
await:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
try
{
await Task.FromException(
new InvalidOperationException("abcde"));
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте обратиться к Result у
Task<int>:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var task = Task.FromException<int>(
new InvalidOperationException("abcde"));
await Task.Yield();
try
{
int x = task.Result;
}
catch (AggregateException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
свойство
Exception,
сохранённый сбой -
метод
FromCanceled,
задача отменена -
свойство
IsCompletedSuccessfully,
ложь при сбое -
Task,
класс, где объявлен метод