如何确定WebClient.DownloadFileTaskAsync是否被取消?

时间:2014-07-31 12:36:31

标签: c# .net asynchronous xamarin.ios webclient

我如何知道是否取消了对WebClient.DownloadFileTaskAsync的调用?

我的方法调用是这样的:

WebClient webclient = new WebClient();
await webClient.DownloadFileTaskAsync(uri, filename);

然后通过以下方式取消呼叫:

webClient.CancelAsync();

当await继续时,我怎么知道它是成功的还是被取消了?

3 个答案:

答案 0 :(得分:4)

使用await时,如果您正在等待的对象被取消,则会抛出OperationCanceledException个对象。

如果任务未取消,执行将在await点之后正常恢复。

答案 1 :(得分:1)

如果我记得很清楚,你只需检查你期待的Task对象。

WebClient webclient = new WebClient();
var task = webClient.DownloadFileTaskAsync(uri, filename);
await task;

稍后,您可以检查它:

task.Status
task.IsCancelled
task.IsCompleted  -> task.Result
task.IsFaulted    -> task.Exception

MSDN:Task

...或者只是检查 Jean Hominal 关于该主题的优点(在任务失败时,等待只是抛出而不是继续)。

答案 2 :(得分:0)

DownloadFileTaskAsync方法返回任务时,您应该只需查看IsCancelled属性。

if (task.IsCancelled) {
     // Task was cancelled.
}

请看这个链接:

http://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx

  

IsCancelled - 获取此Task实例是否已完成执行   由于被取消。