こんばんは。きわさです。
今回もASP.NET MVCの話です。
コントローラでバックグラウンド処理を実行する方法です。
例えば、/Index にアクセスした際、時間のかかる処理を行いたいとします。
以下のように書いてしまうと、時間のかかる処理が終わるまでビューを返さないため、レスポンスが遅くなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 | public ActionResult Index() { // Indexにアクセスしたときに時間のかかる処理を開始 Test(); return View(); } private void Test() { // 時間のかかる処理(仮) System.Threading.Thread.Sleep(10000); return ; } |
そこで、時間のかかる処理がビューと直接関係ない場合などは、処理をバックグラウンドで実行させることで、ビューをすぐに返すことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using System.Threading; using System.Threading.Tasks; using System.Web.Hosting; .... public ActionResult Index() { // バックグラウンド処理を実行 HostingEnvironment.QueueBackgroundWorkItem(TestAsync); // 処理終了を待たずビューを返す return View(); } private async Task TestAsync(CancellationToken cancellationToken) { // 時間のかかる処理(仮) await Task.Delay(10000); return ; } |