вы можете использовать Expression Tress или другие монады (пока не разрешено ссылаться, но этот термин можно найти в вики и у Кальвина также есть отличный блог на эту тему)
В основном все, что позволяет создавать беспристрастное кодирование, может использоваться для асинхронных реализаций.
Вы также можете погуглить на прохождении продолжения. Стиль кодирования, при котором все методы не возвращают значения (void), а принимают параметр (своего рода делегат), сообщая ему, что выполнить после завершения.