讓我們考慮的方法:取消令牌無法訪問時如何中止或終止TPL的任務?
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什麼? 我不能把我的取消標記放入項目的集合中。
如何殺死沒有響應的任務或解決這個問題?
爲什麼你不能將你的令牌傳遞給Items()? –
@DaxFohl我將它們作爲參數。在我的問題中,這些項目只是可視化的內容。 –
你可以使cts成爲一個成員變量,並從'Items'中使用它? –