使用Tasks取消长时间运行IO /网络操作的好方法是什么?

时间:2011-07-15 09:58:07

标签: c# task-parallel-library task cancellation

我一直在研究.net 4.0中的任务及其取消。我喜欢TPL试图以合作的方式正确处理取消的事实。

但是,在任务中的调用阻塞并需要很长时间的情况下,应该怎么做?对于考试IO /网络。

显然取消写入会很危险。但这些都是例子。

示例:如何取消此操作? DownloadFile可能需要很长时间。

Task.Factory.StartNew(() =>
    WebClient client = new WebClient();
    client.DownloadFile(url, localPath);
);

1 个答案:

答案 0 :(得分:1)

任务支持取消令牌。您可以创建CancellationTokenSource的实例,并将其Token属性传递给DownloadFile方法。然后在您可以停止的代码中的点处,检查令牌,IsCancellationRequested属性以查看是否请求取消。

您还应该将令牌传递给StartNew(在方法之后)。

要实际取消操作,您可以在取消令牌上调用Cancel方法。

查看this MSDN article on cancellation