Метод FromCanceled
Task.FromCanceled принимает
CancellationToken, который уже
запросил отмену. IsCanceled
будет true. await
бросает TaskCanceledException.
Сбой -
FromException.
Синтаксис
Task task = Task.FromCanceled(token);
Task<T> task = Task.FromCanceled<T>(token);
Пример
Давайте проверим
IsCanceled:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var task = Task.FromCanceled(
new CancellationToken(true));
await Task.Yield();
bool res = task.IsCanceled;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте поймаем TaskCanceledException
при await:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
try
{
await Task.FromCanceled(
new CancellationToken(true));
}
catch (TaskCanceledException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Пример
Давайте сравнить с успешной задачей:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var canceled = Task.FromCanceled(
new CancellationToken(true));
var ok = Task.FromResult(12345);
await Task.Yield();
bool res = canceled.IsCanceled && !ok.IsCanceled;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Смотрите также
-
метод
FromException,
задача со сбоем -
свойство
IsCompletedSuccessfully,
ложь при отмене -
свойство
Status,
состояниеCanceled -
Task,
класс, где объявлен метод