リクエストがコントローラによって処理され、レスポンスがクライアントに返された後に実行する必要があるタスクがあります。そのために、コントローラーのイベントをオーバーライドし、OnActionExecuted()
このメソッド内でタスクを呼び出しました。
OnActionExecuted()
タスクの実行には時間がかかり、void も返されるため、オーバーライドされたメソッドがすぐに戻り、タスクの実行中にクライアントに応答を送信できるように、タスクを非同期で呼び出したいと考えています。Task.Run()
(.net 4.5で)を使用して、以下のコードでこれを実装しようとしました
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
Task.Run(() => WrapUp());
}
ただし、これでは目的の効果が得られません。コードをステップ実行すると、引き続き同期的に実行されます。メソッド内のすべてが、WrapUp()
メソッドが終了する前に呼び出されOnActionExecuted()
ます。WrapUp()
メソッドがハングすると、クライアントは応答を受信する前にタスクの完了を待機したままになります。
これを意図したとおりに機能させるにはどうすればよいですか?