. NET Закрыть задание с CancellationToken при условии - PullRequest
0 голосов
/ 04 апреля 2020

Как правильно создать задачу с CancellationToken и закрыть задачу при условии?

Например:

CancellationToken CancellationToken = new CancellationTokenSource();

Task.Run(() => {
  try{
    // Get some data from APIs...
    GetDataFromApi();
  }
  catch(Exception ex)
  {
    // So here I want to cancel this task and I do not want any continuation Tasks to run
  }
}, CancellationToken.Token);

Нужно ли проверять, отменен ли CancellationToken или как правильно ли я это делаю?

Спасибо

1 Ответ

1 голос
/ 04 апреля 2020

Технически, способ установить задачу в состояние Canceled - это сгенерировать OperationCanceledException и передать токен отмены, который был связан с задачей (что обычно делается путем вызова метода CancellationToken.ThrowIfCancellationRequested()). Но для этого требуется, чтобы токен IsCancellationRequested был true. Таким образом, один из способов добиться желаемого эффекта - сначала отменить, а затем позвонить ThrowIfCancellationRequested():

var cts = new CancellationTokenSource();

Task.Run(() => {
    try
    {
        // Get some data from APIs...
        GetDataFromApi();
    }
    catch (Exception ex)
    {
        cts.Cancel();
        cts.Token.ThrowIfCancellationRequested();
    }
}, cts.Token);
...