質問: をメソッドから返されたCancellationToken
に関連付ける方法はありますか?Task
async
一般に、がのと一致するでスローされると、 はTask
のCanceled
状態になります。それらが一致しない場合、タスクは次の状態になります。OperationCancelledException
CancellationToken
Task
CancellationToken
Faulted
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);
}
async
/では、メソッドのawait
を設定する方法が見つかりませんでした(したがって、同じ種類の機能を実現します)。私のテストから、メソッドが Canceled 状態になる原因となるようです。Task
CancellationToken
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
メソッドから呼び出したメソッドがキャンセルされた場合 (およびキャンセルを予期していない場合、つまり this ではない場合)、タスクが状態に入ることが予想されるため、もう少し制御できるとよいでしょうTask
。-州ではありません。CancellationToken
Faulted
Canceled