[英]Task from cancellation token?
鉴于取消令牌,我想创建一个等待它的任务,这是永远不会完成但可以取消。 我需要这样的模式,IMO应该很常见:
async Task DoStuff(Task t, CancellationToken ct)
{
// t was made from TaskCompletionSource,
// both t and ct are beyond my control
Task t2 = TaskFromCancellationToken(ct);
await Task.WhenAny(t, t2);
// do stuff
}
我到目前为止最好的想法是:
Task TaskFromCancelationToken(CancellationToken ct)
{
return Task.Delay(Timeout.Infinite, ct);
}
是否有更好的方法来实现这种逻辑?
Task.Delay(Timeout.Infinite, cancellationToken)
您在问题中提出的答案是我所知道的最佳解决方案。 原因如下:
根据我的知识,很多人大量使用Task.Delay
方法,并且在Microsoft博客上也推荐使用。 MSDN示例 。
为什么要自己编写代码(包括测试),利用TaskCompletionSource
将取消令牌转换为任务? 最好是利用标准库而不是重新发明轮子; 它们比你的代码更容易出错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.