Eigenartige Überlastungsauflösung mit while (true)

Ich habe Synchronisierungs- / Asynchronisierungsüberladungen implementiert, als ich auf diese besondere Situation gestoßen bin:

Wenn ich einen regulären Lambda-Ausdruck ohne Parameter oder einen Rückgabewert habe, geht er an denRun Überladung mit demAction Parameter, der vorhersehbar ist. Aber wenn dieser Lambda a hatwhile (true) Darin geht es um die Überlastung mit demFunc Parameter.

public void Test()
{
    Run(() => { var name = "bar"; });
    Run(() => { while (true) ; });
}

void Run(Action action)
{
    Console.WriteLine("action");
}

void Run(Func<Task> func) // Same behavior with Func<T> of any type. 
{
    Console.WriteLine("func");
}

Ausgabe:

Aktion
func

Also, wie kann das sein? Gibt es einen Grund dafür?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage