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 它们。
我正在构建一个 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 它们。