简体   繁体   中英

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM