Доступ к CancellationToken, который отменил задачу - PullRequest
0 голосов
/ 08 мая 2018

Я выполняю стандартную операцию копирования результата Task в TaskCompletionSource:

TaskCompletionSource<int> tcs = ...;

Task<int> task = ...;

task.ContinueWith(t =>
{
    if (t.IsCanceled)
        tcs.TrySetCanceled(new TaskCanceledException(task).CancellationToken);
    else if (t.IsFaulted)
        tcs.TrySetException(task.Exception.InnerExceptions);
    else
        tcs.TrySetResult(task.Result);
});

Вы можете заметить забавный фрагмент кода для установки токена, который вызывает отмену. Это часть, которую я пытаюсь сделать немного чище.

В качестве детали реализации существует элемент Task.CancellationToken, к которому было бы здорово иметь доступ, но он является внутренним. Создание нового TaskCanceledException - это самый дешевый способ получить к нему доступ. Есть ли лучший способ?

...