C#async,等待没有任务

时间:2013-03-17 07:34:25

标签: c# asynchronous system.reactive async-await

通过创建一个或多个awaiters和awaitables,是否可以在C#中构建协同程序?

理想情况下,我希望能够写出如下内容:

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

然后从Click方法中获取一些我可以在另一个异步方法中等待的东西,或者我可以用一些MoveNext / GetResult方法显式迭代。

最终目标是我需要将C#async / await与F#monadic coroutines集成到游戏开发框架中(http://casanova.codeplex.com)。

1 个答案:

答案 0 :(得分:7)

  

通过创建一个或多个awaiters和awaitables,是否可以在C#中构建协同程序?

当然!我有blog post使用TaskScheduler来构建简单的协同程序,Jon Skeet有一个blog post使用自定义等待来构建简单的协程。

但是看看你的其他问题和评论,我不确定协程是否是你真正想要的。如果你想“等待”等待,那么你最好的选择是Reactive Extensions(它与async很好地互操作)。 “async yield”没有C#语言功能。