こんばんは。きわさです。
今回も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;
}
