【发布时间】:2018-11-26 06:04:02
【问题描述】:
我们的应用程序使用 WCF 作为数据提供者,并且在某些页面上,我们对不同的服务进行了多次调用。我认为优化的好作品,并开始将其重写为async。所以在重写之前它看起来像
public ActionResult SomeAction(int id)
{
var r1 = AService.Call1();
var r2 = BService.Call2();
var r3 = CService.Call3();
//another logic
}
现在变成了
public async Task<ActionResult> SomeAction(int id)
{
var r1 = await AService.Call1Async();
var r2 = await BService.Call2Async();
var r3 = await CService.Call3Async();
//another logic
}
使用这种方法我遇到了两个问题:
- 在第一次服务调用应用程序陷入无休止的加载和 没有执行其他操作。调试显示相同 - 第一次调用和 之后什么都没有。
- 我们的一些类不能使用异步方法,a.e.我们的静态 AuthorizationProvider。
更新: @zuckerberg 回答有助于优化(我正在创建任务并将它们放入等待的 Task.WhenAll()),但我仍然在 WCF 服务上挂起——而同步调用正常, 异步调用将调用逻辑转入睡眠状态并且永远不会唤醒它。
【问题讨论】:
-
你是否屏蔽了
CallAsync中的任何一个。 -
您对 async/await 的适应看起来不错。所以肯定有其他东西在起作用,但这里没有人可以查看您的 PC。所以开始设置minimal reproducible example
标签: c# asp.net-mvc wcf async-await