_>На C# для такой задачи ПМ только усложнять задачу. Вот полная консольная программа. Выведет: Finished in 100 ms.
Я привел это лишь для того, чтобы пояснить принцип решения первоначального вопроса ("избавиться от async/await"). Понятно же, что в разных clause'ах паттерн матчинга на самом деле будет записана какая-то более сложная логика, от scatter-gather до каких-нибудь еще решений. Мне лишь нужно было показать элегантность message passing по сравнению с "костылями" типа state machine этих самых async/await.