.net - titulo - En espera de tareas: devuelva la tarea o espere si no hay código después de esperar
seo meta tags (1)
await
se usa para continuar la ejecución del cuerpo del método cuando se espera que se complete Si no hay nada para continuar, entonces no necesita esperar.
Puede pensar en esperar (simplificado) a partir de la operación ContinueWith
. Entonces, tu primer método es algo como:
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
DoMethodAsync().ContinueWith(t => {});
Hay un buen artículo de MSDN que describe lo que sucede en el método asíncrono que tiene una buena imagen de flujo de código:
Esta pregunta ya tiene una respuesta aquí:
He leído un poco y creo que he comprendido los conceptos básicos de las palabras clave await y async, en relación con System.Threading.Task.
Sin embargo, no estoy seguro de si tengo razón en un pequeño problema y estoy buscando una verificación o alguien que me corrija.
Estoy implementando un método asíncrono, con esta firma:
public Task ProcessUploadedFile(FileInfo info, string contentType);
Obviamente, si quiero esperar algo dentro del método, debo agregar la palabra clave asíncrona en la firma,
Mi pregunta es la siguiente: si lo último que hace mi método es llamar a otro método asíncrono o devolver una tarea, ¿hay algún punto para esperarla?
P.ej.
1:
public async Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
await DoMethodAsync();
}
2:
public Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
return DoMethodAsync();
}
Inicialmente escribí el primero, pero ya no puedo ver el punto de agregar la espera. Si tuviera que escribir el último, lograré lo mismo, y el que llama de ambos métodos aún puede usar la palabra clave await si lo eligen, ¿no?
¿Hay alguna diferencia en lo anterior? Cual es mejor"?