I just stumbled on the following behavior, which I don't see the motivation for.
Consider the following methods:
void Foo(Action bar)
{
     bar();
     Console.WriteLine("action");
}
async Task Foo(Func<Task> bar)
{
    await bar();
    Console.WriteLine("func");
}
void Bar()
{
}
This definition causes a compiler error, stating that the call to Foo is ambiguous between the two methods:
void Baz()
{
    Foo(Bar); // <-- compiler error here
}
However, this works fine:
void Baz()
{
    Foo(() => Bar());
}
Why is this even ambiguous (Bar() doesn't return a Task, so Bar shouldn't be a Func<Task>)? Why does it work when I use a lambda expression instead of a method group?