Ну, как я понимаю, эквивалент кода, который вы написали (async runner => await runner.Test ()), будет
public static async void Do(Runner r)
{
await r.Test();
}
И, следовательно, вы не будете ждать метода Do (он асинхронный void), тогда как в первой версии вы фактически выполняете следующую задачу только после того, как предыдущая закончилась.
Мой метод испытаний больше не должен быть асинхронным
Я думаю, что это выглядит просто потому, что нигде нет явной асинхронной пустоты, если переписать ее именованными методами, это будет легче увидеть.