C#为什么我不应该使用协同程序?

Mar*_*son 5 c# coroutine unity-game-engine

关于这个帖子的评论之一:检查条件并调用具有延迟统一周期的连续方法,说:

永远不要使用协同程序.他们从ac#开发者的角度来教导不良习惯,如果你做一个普​​通的c#工作会导致私刑

我的问题是,这是为什么?这只是在Unity还是一般?Unity的官方虚拟现实示例https://www.assetstore.unity3d.com/en/#!/content/51519非常重视它们(特别是传单示例)而不是Invoke或Invoke Repeating,这些示例项目最近也发布了.

Cor*_*son 8

这是一个非常统一的东西,虽然建议适用于任何地方.

开发人员不希望迭代IEnumerable更改程序的状态.这不是什么IEnumerable意图,并且与所有.NET的行为不一致.

Unity正在做的是使用yield return伪协程,它会对任何不熟悉它的开发者造成混淆.

在现代C#中,我们有async/await来完成Unity的目标,但Unity是在该功能可用之前制作的.

  • 虽然使用 `yield` 构建协程非常容易,但是您将如何使用 `async`/`await` 构建它?有趣的是 [wiki](https://en.wikipedia.org/wiki/Coroutine#Implementations_for_C.23) 将 `yield` 模式列为半协程模式,但没有列出 `async`/`await`。 (2认同)