【发布时间】:2013-05-26 11:58:01
【问题描述】:
我正在编写一个网页,它调用了一些网络服务。调用看起来像这样:
var Data1 = await WebService1.Call();
var Data2 = await WebService2.Call();
var Data3 = await WebService3.Call();
在代码审查期间,有人说我应该将其更改为:
var Task1 = WebService1.Call();
var Task2 = WebService2.Call();
var Task3 = WebService3.Call();
var Data1 = await Task1;
var Data2 = await Task2;
var Data3 = await Task3;
为什么?有什么区别?
【问题讨论】:
-
除非它是某种复制问题,否则我看不出有任何理由一个体面的编译器不会优化额外的分配。不过,我对 C# 的了解还不够肯定。也许这只是一个语义问题,而您的团队更愿意明确表示调用是一项任务,而任务的结果是数据?
-
@JAB 这不是真的。这两个代码 sn-ps 的语义存在戏剧性的差异。
-
@servy 你的语义是什么?
-
@Servy 我已经纠正了。由于我很少使用 C#,我的印象是
await用于允许异步方法的非阻塞变量分配,而实际上恰恰相反。 -
@JAB 你能想出更好的办法吗? (并不是说它在这一点上真的可以改变。)很多人花了很多时间思考什么是合适的。
标签: c# web-services task-parallel-library .net-4.5 async-await