Resolución de sobrecarga peculiar con while (verdadero)
Estaba implementando sobrecargas de sincronización / asíncrona cuando me encontré con esta situación peculiar:
Cuando tengo una expresión lambda regular sin parámetros o un valor de retorno, va alRun
sobrecargar con elAction
parámetro, que es predecible. Pero cuando esa lambda tiene unwhile (true)
en ella va a la sobrecarga con elFunc
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");
}
Salida:
acción
func
Entonces, ¿cómo puede ser eso? ¿Hay alguna razón para ello?