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

Kug*_*gel 5 c# task task-parallel-library cancellation

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

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

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

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

Task.Factory.StartNew(() =>
    WebClient client = new WebClient();
    client.DownloadFile(url, localPath);
);
Run Code Online (Sandbox Code Playgroud)

Jon*_*een 1

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

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

要实际取消操作,您可以调用取消标记上的 Cancel 方法。

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