С# async, ждать без задач

Создав один или несколько ожидающих и ожидающих, можно ли создавать сопрограммы в С#?

В идеале я хотел бы написать что-то вроде:

void async Click() {
  var mouse_position = await left_mouse_click();
  await shoot_projectile();
}

а затем получить из метода Click что-то, что я могу либо ожидать внутри другого метода асинхронизации, либо я могу явно перебрать с помощью метода MoveNext/GetResult.

Конечной целью является то, что мне нужно интегрировать С# async/await с FAD monadic coroutines для рамки разработки игр (http://casanova.codeplex.com).

Ответ 1

Создав один или несколько ожидающих и ожидающих, можно ли создавать сопрограммы в С#?

Конечно! У меня есть сообщение в блоге, которое использует TaskScheduler для создания простых сопрограмм, а у Jon Skeet есть сообщение в блоге, в котором пользовательские awaitables могут создавать простые сопрограммы.

Но, глядя на остальную часть вашего вопроса и комментариев, я не уверен, что coroutines - это то, что вы действительно хотите. Если вы хотите "перебрать" по ожиданиям, лучшим вариантом будет Reactive Extensions (который хорошо взаимодействует с async). Нет функции языка С# для "выхода async".