使用任务取消长时间运行的IO/Network操作的好方法是什么?

本文关键字:操作 Network 方法 是什么 IO 任务 取消 长时间 运行 | 更新日期: 2023-09-27 18:02:05

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

然而,在任务内部的调用阻塞并且需要很长时间的情况下,应该怎么做?例如:IO/Network

显然取消写操作是很危险的。但这些都是例子。

例子:我怎么取消这个?DownloadFile需要很长时间。

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

使用任务取消长时间运行的IO/Network操作的好方法是什么?

任务支持取消令牌。你可以创建一个CancellationTokenSource的实例,并将它的Token属性传递给DownloadFile方法。然后在代码中可以停下来的地方,检查令牌,IsCancellationRequested属性,看看是否请求了取消。

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

要实际取消操作,可以调用取消令牌上的cancel方法。

查看这篇关于取消的MSDN文章