11

通过创建一个或多个 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 )。

4

1 回答 1

7

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

当然!我有一篇用于TaskScheduler构建简单协程的博文,而 Jon Skeet 有一篇文,它使用自定义等待对象来构建简单的协程。

但是看看你剩下的问题和评论,我不确定协程是否是你真正想要的。如果您想“迭代”等待对象,最好的选择是Reactive Extensions(与async. “异步产量”没有 C# 语言功能。

于 2013-03-17T13:15:53.543 回答