Compartilhar via


Erro do Compilador CS4008

Não é possível aguardar "void"

Exemplo

O exemplo a seguir gera 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 corrigir este erro

Embora esse erro possa ser corrigido alterando a assinatura de goo:

    public async Task goo()
    {
        await Task.Factory.StartNew(() => { });
    }

Simplesmente adicionar Task à assinatura do método perpetua desnecessariamente uma máquina de estado criada pelo compilador quando ela não é necessária. O método goo não requer um await, nem precisa ser assíncrono. Em vez disso, considere simplesmente retornar o Task criado por Task.Factory:

    public Task goo()
    {
        return Task.Factory.StartNew(() => { });
    }