コントローラから呼び出されたときにPostAsync
コールのシナリオが必要ないシナリオで何が起こっているのかを知りたいのですが、
は例えば、私はいくつかのアクションHttpClient PostAsync from controller from result
[HttpPost]
public ActionResult DoSomething(SomeModel model)
{
...
PostDataFireAndForget(model);
...
return new EmptyResult();
}
private void PostDataFireAndForget(SomeModel model)
{
try
{
using (var client = new HttpClient())
{
string targetUrl="SomeUrl";
client.PostAsync(targetUrl, new FormUrlEncodedContent(model.Content));
}
}
catch (Exception ex)
{
//we didn't care about the response, no additional requirements here
//ignore
}
}
を持っているので、私はそれがすべての可能なシナリオに進むと、なぜだろうかを正確に知っているように思います。最も興味深いのは、PostAsyncが他のすべてのアクションコードよりも時間がかかり、PostAsyncが完了する前にアクションが完了するというシナリオです。終了/ブロック/終了しますか?実際に何らかの非同期のものを実行したいので、結果を待たずにいたい場合は、より良いアプローチがありますか?
例外をキャッチして無視できるように、fireとforgetメソッドを非同期にします。現在の設計では、主なアクション要求のスレッドが転倒する可能性があります。非同期にすることで、このメソッドは例外を処理(またはこの場合は処理しない)し、他のスレッドを続行させることができます。 – Nkosi
ASP.NETの落とし穴(と落とし穴)はここで何度も議論されており、 'QueueBackgroundWorkItem'を検索しています。 – Noseratio