최근에 나는 우리가 사용하고있는 코드를 통해 잘 작동하고 있으며 내 인생에서 그 이유를 알 수 없습니다.OwinCommunicationListener에서 호스팅되는 Async Web API의 Fire 및 Forget 메서드
OwinCommunicationListener를 통해 호스팅되는 서비스 패브릭 클러스터에서 호스팅되는 웹 API가 있습니다.
[HttpPost]
public async Task<HttpResponseMessage> WebApiMethod(RequestObject request)
{
string test;
SomeObject obj;
....
DoSomethingAsync(test, obj);
return this.ActionContext.CreateResponse(HttpStatusCode.OK, new { Status = "Success" });
}
private async Task DoSomethingAsync(string param1, SomeObject param2)
{
.....
await SomeOtherAsyncMethod();
.....
}
는 지금까지 내가 이해가 DoSomethingAsync의 방법 완료 및 해제 처분 이후 조기 완료 경우 TaskCancelledException 또는 뭔가를 던져해야하는 요구 사이의 경쟁 조건해야하지만하지 않았다.
DoSomething 작업이 기다리지 않고도 매 작업을 완료하기 때문에 약간의 오류가 예상됩니다. 추가 할 경우
await Task.Delay(10000);
다음에 API 응답이 거의 즉각적으로 실행되고 나머지 10 초 후 코드가 실행됩니다. 원래 호출이 Fire-and-Forget (기다리지 않을) 이었기 때문에 그때까지는 호스트 스레드를 삭제하면 안됩니다.
여기에 무엇이 누락 되었습니까?
이것은 나에게 불명확합니다. 왜 예외를 기대합니까? – Fildor
ASP.Net의 화재 및 잊어 버림 방법은 거의 항상 끔찍한 생각입니다. 이런 종류의 일을 처리하기 위해 만들어진 라이브러리, 예를 들어 Hangfire를 사용해야합니다. 또는 당신이 Azure에있는 것처럼 보이기 때문에 WebJobs일지도 모르는 기능을 100 % 확신하지 않고이를 활용할 수 있습니까? – DavidG
@fildor 나는 DoSomethingAsync 메서드를 기다리지 않고서도 어떻게 든 매시간 작업을 완료하지 못하기 때문에 예외가 예상됩니다. – goldsmit409