How to await on async delegate

In order for something to be awaited, it has to be awaitable. As void is not so, you cannot await on any Action delegate.

An awaitable is any type that implements a GetAwaiter method, which returns a type that implements either INotifyCompletion or ICriticalNotifyCompletion, like Task and Task<T>, for example.

If you want to wait on a delegate, use Func<Task>, which is an equivalent to a named method with the following signature:

public Task Func()

So, in order to await, change your method to:

static void Main(string[] args)
{
    Func<Task> testFunc = async () =>
    {
        Console.WriteLine("In");
        await Task.Delay(100);
        Console.WriteLine("First delay");
        await Task.Delay(100);
        Console.WriteLine("Second delay");
    };
}

And now you can await it:

await testFunc();

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)