我一直在研究.net 4.0中的任务及其取消。我喜欢TPL试图以合作的方式正确处理取消的事实。
但是,在任务中的调用阻塞并需要很长时间的情况下,应该怎么做?对于考试IO /网络。
显然取消写入会很危险。但这些都是例子。
示例:如何取消此操作? DownloadFile
可能需要很长时间。
Task.Factory.StartNew(() =>
WebClient client = new WebClient();
client.DownloadFile(url, localPath);
);
答案 0 :(得分:1)
任务支持取消令牌。您可以创建CancellationTokenSource的实例,并将其Token属性传递给DownloadFile方法。然后在您可以停止的代码中的点处,检查令牌,IsCancellationRequested属性以查看是否请求取消。
您还应该将令牌传递给StartNew(在方法之后)。
要实际取消操作,您可以在取消令牌上调用Cancel方法。