首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用WaitHandle取消

用WaitHandle取消
EN

Stack Overflow用户
提问于 2012-08-26 11:30:58
回答 1查看 8.4K关注 0票数 17

我阅读了很多有关第三方物流的资料,找出了如何使用取消机制。但我被WaitHandle困住了。

如果要取消任务,可以定义CancellationTokenSource并将其与任务一起传递,并且可以使用ThrowIfCancellationRequested方法取消任务。

我的问题是,当我需要使用WaitHandle来取消的时候,为什么简单的取消在这种情况下不能工作?

编辑 MSDN链接:http://msdn.microsoft.com/en-us/library/dd997364 ..。请参见使用WaitHandle收听。

只是学习TPL..。

请帮忙..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-26 12:02:04

假设您有一个ManualResetEventSlim类型的信号,并希望等待信号被设置、操作被取消或操作超时。然后,您可以如下所示地使用等待法

代码语言:javascript
复制
if (signal.Wait(TimeSpan.FromSeconds(10), cancellationToken))
{
    // signal set
}
else
{
    // cancelled or timeout
}

但是,如果您有一个ManualResetEvent类型的信号,则没有这样的等待方法。在这种情况下,您可以使用CancellationTokenWaitHandleWaitHandle.WaitAny法来达到同样的效果:

代码语言:javascript
复制
if (WaitHandle.WaitAny(new WaitHandle[] { signal, cancellationToken.WaitHandle },
                       TimeSpan.FromSeconds(10)) == 0)
{
    // signal set
}
else
{
    // cancelled or timeout
}
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12129749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档