Свяжите CancellationToken с задачей асинхронного метода

Вопрос: Есть ли способ связатьCancellationToken сTask вернулся изasync метод?

Как правило,Task в конечном итоге вотменен указать, еслиOperationCancelledException брошен сCancellationToken соответствуетTaskCancellationToken, Если они нет, то задача переходит вразорванный государство:

    void WrongCancellationTokenCausesFault()
    {
        var cts1 = new CancellationTokenSource();
        var cts2 = new CancellationTokenSource();
        cts2.Cancel();

        // This task will end up in the Faulted state due to the task's CancellationToken not matching the thrown 
        // OperationCanceledException's token.
        var task = Task.Run(() => cts2.Token.ThrowIfCancellationRequested(), cts1.Token);  
    }

С /asyncawaitЯ не имеют нашел способ установить методTaskCancellationToken (и таким образом достичь такой же функциональности). Из моего тестирования кажется, чтолюбой OperationCancelledException вызоветasync Способ входа в Отмененное состояние:

    async Task AsyncMethodWithCancellation(CancellationToken ct)
    {
        // If ct is cancelled, this will cause the returned Task to be in the Cancelled state
        ct.ThrowIfCancellationRequested(); 
        await Task.Delay(1);

        // This will cause the returned Task to be in the Cancelled state
        var newCts = new CancellationTokenSource();
        newCts.Cancel();
        newCts.Token.ThrowIfCancellationRequested();
    }

Было бы неплохо иметь немного больше контроля, так как если метод, который я вызываю из моегоasync метод отменен (и я нене ожидаем отмены - т.е. это не этоTaskCancellationToken), Я ожидаю, что задание войдет в состояние Failed, а не в состояние Cancelled.

Ответы на вопрос(1)

Ваш ответ на вопрос