Task.WaitAll挂起在webapi调用中

时间:2017-03-28 16:33:22

标签: .net c#-4.0 asp.net-web-api async-await

从客户端(AngularJS)调用webapi“Test”。它执行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));
    }

2 个答案:

答案 0 :(得分:0)

您需要将api方法配置为异步并返回任务。

像这样实施

[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);
}

答案 1 :(得分:0)

您还需要将转储功能更改为

public async Task Dump(string x, string y)
{
    await Task.Run(() => methodToDump(x, y)).ConfigureAwait(false);
}

等待后没有代码,因此无需强制继续捕获的SynchronizationContext