estoy leyendo a través de la TAP Whitepaper, y estoy confundido por esta muestra dada para la implementación de un tiempo de espera en la página 22:asíncrono CTP - Tarea cuestión de tiempo de espera
"Consideremos una aplicación de interfaz de usuario, que quiere descargar una imagen y desactivar la interfaz de usuario mientras la imagen se está descargando. Si la descarga tarda demasiado tiempo, sin embargo, la interfaz de usuario debe volver a habilitar la descarga y debe ser descartada ".
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; }
}
Lo que me confunde es esta línea:
Bitmap bmp = await download.TimeoutAfter(3000);
¿Cuál es el punto de la TimeoutAfter en este punto de la lógica? ¿No debería haberlo logrado ya a través de la llamada a Task.WhenAny? Parece que lo que está diciendo es: "Después de que la tarea de descarga haya terminado, concédele 3 segundos más para finalizar". ¿Es esto un error en el ejemplo o lo estoy malinterpretando?