Своеобразное разрешение перегрузки с while (true)
Я реализовывал синхронные / асинхронные перегрузки, когда натолкнулся на эту особую ситуацию:
Когда у меня есть регулярное лямбда-выражение без параметров или возвращаемого значения, оно переходит к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
Итак, как это может быть? Есть ли причина для этого?