【问题标题】:What would be a good way to Cancel long running IO/Network operation using Tasks?使用任务取消长时间运行的 IO/网络操作的好方法是什么?
【发布时间】:2011-10-06 00:43:15
【问题描述】:

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

但是,如果任务内部的调用被阻塞并且需要很长时间,应该怎么办?例如 IO/网络。

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

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

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

【问题讨论】:

  • 你能发布一个关于你的情况的代码sn-p吗?

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


【解决方案1】:

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

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

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

查看this MSDN article on cancellation

【讨论】:

  • 我很抱歉,但我的问题的重点是我无法控制的操作。 DownloadFile 不是我的方法。
  • 只有在有支持取消的异步版本时才能这样做(如果有DownloadFile)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
相关资源
最近更新 更多