如何停止WebClient下载

时间:2018-10-17 19:38:18

标签: c# .net asynchronous async-await task-parallel-library

使用

下载数据时
byte[] data = await webClient.DownloadDataTaskAsync(uri);

或任何其他async方法,有什么方法可以 停止 下载吗?我不想只是忽略结果。我想中止下载,该下载在移动设备上可能会很昂贵,并且如果用户出于支持其他下载而取消了该下载,则会减慢其他下载的速度。

我尝试了

webClient.CancelAsync();

但它似乎只是在下载完成后引发TaskCanceledException 。通过将等待的下载包装在try-catch块中,可以看到这一点。 CancelAsync()之后很长一段时间才捕获该捕获。

1 个答案:

答案 0 :(得分:-1)

您可以继续使用 CancelAsync(),但是您需要验证文件是否在 DownloadFileCompleted事件

中未被取消。
webClient.DownloadFileCompleted += (s, e) =>
{
      if (e.Cancelled)
      {
          //cleanup delete partial file
          Client.Dispose();                    
          return;
      } 
      else 
      {/* the file is not cancelled, do what you need with it here, no TaskCanceledException would occure */}
 }