使用异步任务取消

时间:2010-10-14 07:26:52

标签: c# asynchronous task

有没有办法取消Async System.Threading.Tasks.Task?即。

Task.Factory.FromAsync(
    client.BeginCallWebService, 
    client.EndCallWebService, 
    "param1", 
    null);

我想在此任务中注册一个共享的CancellationToken,这样如果在调用此异步任务之前取消该令牌,则不会调用它。

由于

2 个答案:

答案 0 :(得分:2)

所以,考虑到更多的想法,我认为取消Async任务是没有意义的,因为Begin部分将被调用'inline',就在调用线程上。

因此无需以这种方式支持取消。

如果您想要实际中止处理调用(例如,中断Web服务或使用Web客户端),您可以实现TaskCompletionSource方法,而不是在此处记录:http://msdn.microsoft.com/en-us/library/ee622454.aspx

很抱歉回答我自己的问题,我猜这有点不禁。

答案 1 :(得分:0)

我不同意取消异步任务毫无意义的概念。

你是对的,它通常会立即调用(并返回一个热门任务),但情况并非总是如此,例如当你使用一个使用OrderedTaskScheduler的TaskFactory时(​​一个类执行一个又一个任务) )。 OrderedTaskScheduler包含在http://archive.msdn.microsoft.com/ParExtSamples/Release/ProjectReleases.aspx?ReleaseId=4179

保重, 马丁