C# Error
CS4008 – Cannot await ‘void’
Reason for the Error & Solution
Cannot await ‘void’
Example
The following sample generates 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() { }
}
To correct this error
Although this error can be corrected by changing the signature of goo
:
public async Task goo()
{
await Task.Factory.StartNew(() => { });
}
Simply adding Task
to the method’s signature needlessly perpetuates a compiler-created state machine when it is not needed. The goo
method does not require an await
, nor does it need to be asynchronous. Instead, consider simply returning the Task
created by Task.Factory
:
public Task goo()
{
return Task.Factory.StartNew(() => { });
}