我阅读了很多有关第三方物流的资料,找出了如何使用取消机制。但我被WaitHandle困住了。
如果要取消任务,可以定义CancellationTokenSource并将其与任务一起传递,并且可以使用ThrowIfCancellationRequested方法取消任务。
我的问题是,当我需要使用WaitHandle来取消的时候,为什么简单的取消在这种情况下不能工作?
编辑 MSDN链接:http://msdn.microsoft.com/en-us/library/dd997364 ..。请参见使用WaitHandle收听。
只是学习TPL..。
请帮忙..。
发布于 2012-08-26 12:02:04
假设您有一个ManualResetEventSlim类型的信号,并希望等待信号被设置、操作被取消或操作超时。然后,您可以如下所示地使用等待法:
if (signal.Wait(TimeSpan.FromSeconds(10), cancellationToken))
{
// signal set
}
else
{
// cancelled or timeout
}但是,如果您有一个ManualResetEvent类型的信号,则没有这样的等待方法。在这种情况下,您可以使用CancellationToken的WaitHandle和WaitHandle.WaitAny法来达到同样的效果:
if (WaitHandle.WaitAny(new WaitHandle[] { signal, cancellationToken.WaitHandle },
TimeSpan.FromSeconds(10)) == 0)
{
// signal set
}
else
{
// cancelled or timeout
}https://stackoverflow.com/questions/12129749
复制相似问题