ファイルをダウンロードするメソッドを呼び出すコードがいくつかあります。
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));
が、これが最善の方法かどうかはわかりません。
だから私の質問は、これを解決するにはどうすればいいですか?また、タスクが強制終了された場合、タスクをクリーンアップするにはどうすればよいですか? (それとも、気にしなくていいの?)