【发布时间】:2017-08-21 20:27:55
【问题描述】:
从客户端(AngularJS)在 webapi“测试”下面调用。它执行 Line1、Line2 和 Line3 但它挂在 Line3 并且从未移动到 Line4 并且如果在单元测试项目的单元测试中执行相同的 Line1、Line2 和 Line3 执行良好。谁能帮忙看看这里出了什么问题?
[Route("Test")]
[HttpGet]
public IHttpActionResult Test(string input)
{
var taskA = Dump(a, b); //Line1
var taskB = Dump(c, d); //Line2
Task.WaitAll(taskA, taskB); //Line3
Line4;
Line5;
Line6;
Ok(success);
}
转储方法:
public async Task Dump(string x, string y)
{
await Task.Run(() => methodToDump(x, y));
}
【问题讨论】:
-
标记方法
async并使用await Task.WhenAll(taskA, taskB);您还需要将返回类型更改为Task<IHttpActionResult>或其他异步等效项。 -
[Route("Test")] [HttpGet] public async Task<IHttpActionResult> Test(string input) { var taskA = Dump(a, b); //Line1 var taskB = Dump(c, d); //Line2 await Task.WhenAll(taskA, taskB); //Line3 Line4; Line5; Line6; Ok(success); } -
它给出了相同的结果。挂在 Line3。我只想在 Line1 和 Line2 开始的任务完成后才执行 Line4
-
使用
await,您的方法不会在第3行挂起,它将控制权返回给调用者,并且仅在WhenAll中的所有任务完成后才执行以下行
标签: .net c#-4.0 asp.net-web-api async-await