Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# async, await without tasks

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).

like image 584
Giuseppe Maggiore Avatar asked Mar 17 '13 07:03

Giuseppe Maggiore


1 Answers

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".

like image 133
Stephen Cleary Avatar answered Nov 01 '22 10:11

Stephen Cleary