こんばんは。きわさです。
今回もASP.NET MVCの話です。
コントローラでバックグラウンド処理を実行する方法です。
例えば、/Index にアクセスした際、時間のかかる処理を行いたいとします。
以下のように書いてしまうと、時間のかかる処理が終わるまでビューを返さないため、レスポンスが遅くなります。
public ActionResult Index() { // Indexにアクセスしたときに時間のかかる処理を開始 Test(); return View(); } private void Test() { // 時間のかかる処理(仮) System.Threading.Thread.Sleep(10000); return; }
そこで、時間のかかる処理がビューと直接関係ない場合などは、処理をバックグラウンドで実行させることで、ビューをすぐに返すことができます。
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; }