最近、私たちが使用しているコードで、うまくいきます。OwinCommunicationListenerでホストされているAsync Web APIのFireメソッドとForgetメソッド
OwinCommunicationListenerでホストされているサービスファブリッククラスタでホストされているWeb 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にいるようだから、その機能を100%利用しているわけではなく、WebJobsかもしれませんか? – DavidG
@fildor私はメソッドDoSomethingAsyncを待っているわけではないので、例外を待っていますが、それでも何とか毎回その作業を完了します。 – goldsmit409