SetException
SetException передаёт Exception. При await выбрасывается исходное исключение, а Result оборачивает его в AggregateException.
Синтаксис
tcs.SetException(new InvalidOperationException("abcde"));
Пример
Давайте передадим ошибку и перехватим её при await:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var tcs = new TaskCompletionSource<int>();
tcs.SetException(new InvalidOperationException("abcde"));
try
{
await tcs.Task;
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте сравним с Result:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
var tcs = new TaskCompletionSource<int>();
tcs.SetException(new InvalidOperationException("abcde"));
try
{
_ = tcs.Task.Result;
}
catch (AggregateException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
SetCanceled,
отмена вместо сбоя -
SetResult,
успешное завершение -
Task,
тип задачи -
TaskCompletionSource,
источник