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?