5

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

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

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

示例:我将如何取消这个?DownloadFile可能需要很长时间。

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

1 回答 1

1

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

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

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

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

于 2011-07-15T10:57:43.843 回答