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).
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".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With