私はTAP ホワイトペーパーを読んでいますが、22 ページのタイムアウトを実装するために与えられたこのサンプルに混乱しています:
「画像をダウンロードし、画像のダウンロード中に UI を無効にする UI アプリケーションを考えてみましょう。ただし、ダウンロードに時間がかかりすぎる場合は、UI を再度有効にし、ダウンロードを破棄する必要があります。」
public async void btnDownload_Click(object sender, EventArgs e)
{
btnDownload.Enabled = false;
try
{
Task<Bitmap> download = GetBitmapAsync(url);
if (download == await Task.WhenAny(download, Task.Delay(3000)))
{
Bitmap bmp = await download.TimeoutAfter(3000);
pictureBox.Image = bmp;
status.Text = “Downloaded”;
}
else
{
pictureBox.Image = null;
status.Text = “Timed out”;
download.ContinueWith(t => Trace(“Task finally completed”));
}
}
finally { btnDownload.Enabled = true; }
}
私を混乱させるのは、次の行です。
Bitmap bmp = await download.TimeoutAfter(3000);
ロジックのこの時点での TimeoutAfter のポイントは何ですか? これは、Task.WhenAny への呼び出しによって既に達成されているはずではありませんか? 「ダウンロードタスクが完了したら、あと3秒待ってください」と言っているようです。これは例のエラーですか、それとも誤解していますか?