我有一些调用方法来下载文件的代码:
private async Task DownloadFile()
{
WebClient client = new WebClient();
var downloadTask =
Task.Run(
() =>
client.DownloadFile("http://www.worldofcats.com/bigkitty.zip",
"c:\\cats\\"
);
await downloadTask;
}
要调用此方法,我这样做:
var downloadTask = DownloadFile();
await downloadTask;
由于它是表单应用程序的一部分,因此在 UI 无响应的情况下下载时不会出现问题。唯一的问题是,DownloadFile 方法没有超时,有时可能会出错或挂起,所以我需要设置一个超时。
如果我使用Task.Wait(x);
它,它会阻塞 UI 线程。我想我可以使用await Task.WhenAny(downloadTask, () => Thread.Sleep(50000));
,但我不确定这是否是最好的方法。
所以我的问题是,我应该怎么做才能解决这个问题,如果它被强行终止,我该如何清理我的任务?(或者我需要担心这个吗?)