Resolução de sobrecarga peculiar com while (true)
Eu estava implementando sobrecargas de sincronização / async quando me deparei com essa situação peculiar:
Quando eu tenho uma expressão lambda regular sem parâmetros ou um valor de retorno, ela vai para oRun
sobrecarga com oAction
parâmetro, que é previsível. Mas quando esse lambda tem umwhile (true)
nele vai para a sobrecarga com oFunc
parâmetro.
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");
}
Resultado:
açao
func
Então, como pode ser isso? Existe uma razão para isso?