内容简介:两个版本的工作效果都是一样的,唯一的区别是,当你在这里等待时,你会得到一些性能损失(因为状态机必须被设置,并且可能会使用延续).所以归结于一个权衡:你希望你的方法有一些更有效率,而不是以较少的可读性为代价?还是愿意牺牲表现才能阅读?通常,我建议你先去可读性,只关注性能,如果分析告诉你是值得的.但在这种情况下,我认为可读性的增加很小,所以我可能不会等待.
尝试了解新的异步/等待模式,我有一个问题,我找不到答案,即如果我应该使用异步来装饰我的方法,如果我打算从其他异步函数调用这些方法,或者只是返回任务在适当情况下?
换句话说,这些A,B或C中哪一个是最好的,为什么?
class A<T> { public async Task<T> foo1() //Should be consumed { return await foo2(); } public async Task<T> foo2() //Could be consumed { return await foo3(); } private async Task<T> foo3() //Private { return await Task.Run(...); } } class B<T> { public async Task<T> foo1() //Should be consumed { return await foo2(); } public async Task<T> foo2() //Could be consumed { return await foo3(); } private Task<T> foo3() //Private { return Task.Run(...); } } class C<T> { public async Task<T> foo1() //Should be consumed { return await foo2(); } public Task<T> foo2() //Could be consumed { return foo3(); } private Task<T> foo3() //Private { return Task.Run(...); } }
对于重新排列方法来说似乎是多余的,所以我自然地倾向于C,但是同时使用Task T来感觉有点尴尬.除非您使用await关键字.
两个版本的工作效果都是一样的,唯一的区别是,当你在这里等待时,你会得到一些性能损失(因为状态机必须被设置,并且可能会使用延续).
所以归结于一个权衡:你希望你的方法有一些更有效率,而不是以较少的可读性为代价?还是愿意牺牲表现才能阅读?
通常,我建议你先去可读性,只关注性能,如果分析告诉你是值得的.但在这种情况下,我认为可读性的增加很小,所以我可能不会等待.
还要注意,你的类C仍然不够远:foo1()也不需要等待.
http://stackoverflow.com/questions/12016322/async-all-the-way-down
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- C# 8,接下来会发生什么
- 后疫情时期,活下来了,但你还好吗?
- 魔法书3:让 Arduino 慢下来 20倍省电
- Nginx 为什么快到停不下来?
- Nginx为什么快到根本停不下来?
- Nginx为什么快到根本停不下来?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
API Design for C++
Martin Reddy / Morgan Kaufmann / 2011-2-18 / USD 59.95
The design of application programming interfaces can affect the behavior, capabilities, stability, and ease of use of end-user applications. With this book, you will learn how to design a good API for......一起来看看 《API Design for C++》 这本书的介绍吧!