通过创建一个或多个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)。
答案 0 :(得分:7)
通过创建一个或多个awaiters和awaitables,是否可以在C#中构建协同程序?
当然!我有blog post使用TaskScheduler
来构建简单的协同程序,Jon Skeet有一个blog post使用自定义等待来构建简单的协程。
但是看看你的其他问题和评论,我不确定协程是否是你真正想要的。如果你想“等待”等待,那么你最好的选择是Reactive Extensions(它与async
很好地互操作)。 “async yield”没有C#语言功能。