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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta