【发布时间】:2023-03-24 09:56:01
【问题描述】:
我创建了一个可以进行两次async 调用的方法。
方法必须返回值,所以我在获取数据时有return,最后有return,这是一些默认值。
问题是,当我第二次调用服务时,我等待它的结果,但方法末尾的默认return 首先执行,当第二次调用结果到达时,我无能为力,因为为时已晚。
此代码在网页调用的web api中。
public async Task<HttpResponseMessage> SomeMethod()
{
try
{
await login...;
await doSomething....ContinueWith(x => {
if (x.IsCompleted == true)
{
oneMoreAsyncCall.ContinueWith(r =>
{
if (r.IsCompleted == true)
{
return Request.CreateResponse(HttpStatusCode.OK, someData); // Hit second!
}
}
}
}
catch {}
return Request.CreateResponse(HttpStatusCode.SeeOther); // Hit first!
}
【问题讨论】:
-
为什么要混合
async/await和ContinueWith? -
有没有可能抛出异常?使用空的
catch块,您将“跌倒”到最后的return,并且看不到任何表明有问题的东西。只是一个想法。 -
你不应该有这样的空
catch。至少,您应该记录错误。 -
@IvanStoev 我第一次使用 async/await :-/
标签: c# asynchronous asp.net-web-api async-await