Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
No se puede usar await con «void»
Ejemplo
El ejemplo siguiente genera el error CS4008:
// CS4008.cs (7,33)
using System.Threading.Tasks;
class Test
{
public async void goo()
{
await Task.Factory.StartNew(() => { });
}
public async void bar()
{
await goo();
}
public static void Main() { }
}
Para corregir este error
Aunque este error se puede corregir cambiando la firma de goo
:
public async Task goo()
{
await Task.Factory.StartNew(() => { });
}
Simplemente agregar Task
a la firma del método perpetua innecesariamente una máquina de estado creada por el compilador cuando no es necesaria. El método goo
no requiere await
, ni es necesario que sea asincrónico. En su lugar, considere simplemente devolver el Task
creado por Task.Factory
:
public Task goo()
{
return Task.Factory.StartNew(() => { });
}