我在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
。
您正在任務中拋出新的異常。你爲什麼期望別的嗎? – RandomStranger
嗯,那扔是爲了測試。我描述的問題是我需要等到客戶端停止並啓動,然後返回http響應。但是,它首先返回,然後才拋出異常。 –