ASP.NET MVC コントローラからバックグラウンド処理を実行する

こんばんは。きわさです。

今回も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;
}

スポンサーリンク