Я реализовал перегрузки sync/async, когда столкнулся с этой странной ситуацией:
Когда у меня есть регулярное лямбда-выражение без параметров или возвращаемое значение, оно переходит к перегрузке Run
с параметром Action
, который предсказуем. Но когда эта лямбда имеет while (true)
, она переходит к перегрузке с параметром Func
.
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");
}
Вывод:
действие
FUNC
Итак, как это может быть? Есть ли причина для этого?