Async/Wait 在 REST 中 api 在 IIS Express 上

Async/Wait in REST api on IIS Express

我正在构建一个 RESTful 网络 api,它将启动多个任务,等待它们完成,然后 return 一些数据。但是我一直遇到问题,它似乎在等待时挂起。我将它缩小为最基本的:

[Authorize]
public class ValuesController : ApiController
{
    public IEnumerable<string> Get([FromUri]bool enableWait)
    {
        Task t = Silly(enableWait);
        t.Wait();

        return new string[] { "value1", "value2" };
    }

    private async Task Silly(bool delay)
    {
        if (delay)
            await Task.Delay(1);
    }
}

如果我通过 false 它 returns 没有任何问题。如果我 return 为真,它应该等待 1 毫秒(加上 Task/Asnyc 开销)然后 return。然而它只是挂在那里。

我在 VS 2017 附带的 IIS Express 上 运行 这个。有什么线索吗?

实施 async/await 时,您需要确保实施 一直到 。您的控制器操作需要 async,并且需要 await 您的 Silly() 方法:

public async Task<IEnumerable<string>> Get()
{
    return await Silly();
}

您还必须确保您的 Silly() 方法正在调用它需要的正确异步方法,确保您正在 await-ing 它们。