当前位置: 首页 > 编程语言 > C#

异步一路下来?分享

时间:2023-04-10 23:00:17 C#

异步一路下来?试图理解新的异步/等待模式,我有一个问题找不到答案,即我是否应该用异步装饰我的方法,如果我打算从其他异步函数调用这些方法,或者只是返回任务到位?换句话说,A、B或C类中哪一个最好,为什么?classA{publicasyncTaskfoo1()//应该被消费{returnawaitfoo2();}publicasyncTaskfoo2()//可以被消费{returnawaitfoo3();}privateasyncTaskfoo3()//Private{returnawaitTask.Run(...);}}classB{publicasyncTaskfoo1()//应该被消费{returnawaitfoo2();}publicasyncTaskfoo2()//可以被消费{returnawaitfoo3();}privateTaskfoo3()//私有{returnTask.Run(...);}}classC{publicasyncTaskfoo1()//应该被消费{returnawaitfoo2();}publicTaskfoo2()//可以消费{returnfoo3();}privateTaskfoo3()//私有{returnTask.Run(...);过度工程化的做法显得多余,所以自然而然地倾向于C,但是同时使用Task感觉有点别扭,除非你使用await关键字。两个版本都工作得很好,唯一的区别是当你在这里使用await时,你会得到一些性能损失(因为必须设置状态机并且很可能使用延续)。所以它归结为权衡:您是否希望您的方法以稍微降低可读性为代价来提高效率?还是您愿意为了可读性而牺牲性能?一般来说,我会建议您将可读性放在首位,并且只有在性能分析告诉您值得时才关注性能。但在这种情况下,我认为可读性增益很小,所以我可能不会使用await。另请注意,您的C类仍然不够:foo1()也不需要await。签名中的异步允许编译器创建包含代码的状态机重写,这在一般情况下是实现等待语义所必需的。您的示例正是您不需要重写的特殊情况:异步操作是方法中发生的最后一件事。这种方法在.NET4.0中已经可用。这种兼容性可能是在不需要时避免异步的原因之一。以上就是C#学习教程:异步一路下去?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: