5

私のクラスには、Task<int>を使用してオブジェクトを生成するメソッドがありますTaskCompletionSource<int>。次に、いくつかの非同期操作を実行し、結果を設定します。タスクのContinueWithメソッドを信頼できるかどうかを知る必要があります。

public Task<int> CalculateAsync()
{
    var source = new TaskCompletionSource();
    DoSomeAsyncStuffAndSetResultOf(source);

    source.Task.ContinueWith(t => Console.WriteLine("Is this reliable?"));
    return source.Task;
}

メソッドの呼び出し元はCalculateAsync、生成されたタスクで何かを実行して、その継続が実行されないようにすることができますか?

4

1 に答える 1

4

CancellationToken...のさまざまなオーバーロードにa を渡すことができますContinueWith。これは、継続をキャンセルする最も慣用的な方法です。

継続をキャンセルするためにタスクにできることは何もないと思います。とにかく、そうではないことを願っています...

編集:わかりました、それが起こらないようにしようとしているようですね。いいえ、心配する必要はありません。呼び出し元が何らかの方法でタスクを完了、キャンセル、またはフォルトせずに永久に実行できない限り、継続が実行されます。

于 2012-09-14T15:27:36.733 に答える