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

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

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

スポンサーリンク