visual studio microsoft español descargar community c# asynchronous warnings async-await

c# - microsoft - visual studio installer



Suprimir advertencia de método asíncrono vacío (5)

Elimine "async" y la advertencia desaparece:

public class Test { public void Finalize() { // We don''t need this in this class, so empty body } }

Sigamos adelante y digamos que tengo la siguiente función:

public class Test { public async Task Finalize() { // We don''t need this in this class, so empty body } /* * Additional methods snipped */ }

Si bien esto funciona bien, recibiré una advertencia del compilador que dice:

Este método asíncrono carece de operadores ''a la espera'' y se ejecutará de forma síncrona. Considere usar el operador ''await'' para esperar llamadas de la API que no sean de bloqueo, o ''a la espera de Task.Run (...)'' para realizar trabajos vinculados a la CPU en un subproceso en segundo plano.

¿Cuál sería la mejor manera de evitar esta advertencia sin modificar demasiado el método? En este caso, no puedo lanzar una excepción, ya que se llamará al método, pero no es necesario que ocurra absolutamente nada en este momento, ya que la clase de la que estoy hablando no tiene nada que finalizar.


Este es un problema algo común cuando tiene una implementación síncrona (o noop) para una interfaz asíncrona.

Puede implementar un método de devolución de Task sin la palabra clave async simplemente devolviendo una Task completada, como tal:

public Task FinalizeAsync() { return Task.FromResult(0); }

Sin embargo, esto todavía asigna una Task cada vez que se llama. Si se encuentra haciendo esto mucho, es posible que desee almacenar en caché una instancia de Task completada. Mi biblioteca AsyncEx proporciona varias constantes de tareas para este propósito:

public Task FinalizeAsync() { return TaskConstants.Completed; }

Finalmente, es posible que desee echar un vistazo a la publicación de mi blog sobre la eliminación asíncrona para un par de enfoques alternativos.


Puede poner la siguiente directiva en el (los) archivo (s):

#pragma warning disable 1998

Sin embargo, recomiendo dejar la advertencia solo y seguir sus consejos. Es una advertencia por una buena razón;)

EDITAR: si desea deshabilitar la advertencia para un solo método, puede hacer esto:

#pragma warning disable 1998 async Task Foo() {} #pragma warning restore 1998


antes de .Net 4.6 tuvimos que devolver un valor ficticio que no necesitamos para hacer esto. Sin embargo, ahora podemos hacerlo así:

public async Task MyFunctionAsync() { // Some works here... await Task.CompletedTask; }


De esta manera evitará la advertencia del compilador en lugar de silenciarlo:

Para cualquier persona interesada, si alguna vez necesita eludir tal advertencia del compilador:

public async Task DoStuff { // This method should stay empty // Following statement will prevent a compiler warning: await Task.FromResult(0); }