Compartir a través de


Error del compilador CS4008

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(() => { });
    }