Reputation: 2031
By creating one or more awaiters and awaitables, is it possible to build coroutines in C#?
Ideally I would like to be able to write something like:
void async Click() {
var mouse_position = await left_mouse_click();
await shoot_projectile();
}
and then obtaining from the Click method something that I can either await inside another async method or that I can explicitly iterate with some MoveNext/GetResult method.
The end goal is that I need to integrate C# async/await with F# monadic coroutines for a game development framework (http://casanova.codeplex.com).
Upvotes: 11
Views: 2485
Reputation: 457422
By creating one or more awaiters and awaitables, is it possible to build coroutines in C#?
Sure! I have a blog post that uses TaskScheduler
to build simple coroutines, and Jon Skeet has a blog post that uses custom awaitables to build simple coroutines.
But looking at the rest of your question and comments, I'm not sure if coroutines is what you really want. If you want to "iterate" over awaitables, your best bet is Reactive Extensions (which interoperates well with async
). There is no C# language feature for an "async yield".
Upvotes: 7