メソッドを考えてみましょう:
Task Foo(IEnumerable items, CancellationToken token)
{
return Task.Run(() =>
{
foreach (var i in items)
token.ThrowIfCancellationRequested();
}, token);
}
それから私は消費者を持っています:
var cts = new CancellationTokenSource();
var task = Foo(Items, cts.token);
task.Wait();
アイテムの例:
IEnumerable Items
{
get
{
yield return 0;
Task.Delay(Timeout.InfiniteTimeSpan).Wait();
yield return 1;
}
}
task.Wait はどうですか? アイテムのコレクションにキャンセル トークンを入れることができません。
応答しないタスクを強制終了する方法、またはこれを回避する方法は?