【发布时间】:2016-12-14 10:24:19
【问题描述】:
我有点迷失在ASP.NET Web API 操作中的异步任务。我有一个动作:
[HttpPost]
public async Task<HttpResponseMessage> Restart()
{
await AspManager.Restart();
return Request.CreateResponse(HttpStatusCode.OK, new { result = "Success", message = "IIS site successfully restarted" });
}
重新启动可能会运行很长时间,我想等待它然后返回响应。这是长时间运行的代码:
public static async Task<Task> Restart()
{
var client = new Client("...");
CheckApiKey(client);
var task = Task.Factory.StartNew(async () =>
{
client.Stop();
await Task.Delay(5 * 1000);
throw new BusinessException("test");
client.Start();
});
return await task;
}
所以在主要的Restart 方法中,我正在检查一个密钥,然后我应该停止服务,等待 5 秒并启动服务。在此工作完成之前,控制器的操作不应返回。但问题是动作返回并在 5 秒后抛出 BusinessException。
【问题讨论】:
-
您在任务中抛出了一个新异常。为什么你会期待别的?
-
嗯,那次投掷是为了测试。我描述的问题是我需要等到客户端停止并启动然后返回http响应。但是在这里它首先返回,然后才抛出异常。
标签: c# asp.net-web-api async-await