最近私はQueueBackgroundWorkItem
クラスに潜入していましたが、私は理解できないサンプルを見つけました。QueueBackgroundWorkItem内のタスクを使用
Action
またはFunc
が実行され、新しいスレッドまたはタスクを手動で作成する必要がない、新しいスレッドをQueueBackgroundWorkItem
が作成することを理解します。
しかし、私は(hereからコピーされた)このように、実行アクション内の新しいタスクの作成を参照してください多くのサンプル:
using System.Web.Mvc;
using System.Web.Hosting;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using System;
namespace MyApp.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
//Sample 1
//Action overload
//with lambda expression
HostingEnvironment.QueueBackgroundWorkItem(
clt => LongRunningAction(clt)
);
//Sample 2
//Action overload
//without lambda expression
HostingEnvironment.QueueBackgroundWorkItem(
(Action)LongRunningAction
);
//Sample 3
//Action overload
//with lambda expression
HostingEnvironment.QueueBackgroundWorkItem(
clt => LongRunningActionAsync(clt)
);
//Sample 4
//Action overload
//without lambda expression
HostingEnvironment.QueueBackgroundWorkItem(
await (Action)LongRunningAction
);
return View();
}
//Action overload's target
private void LongRunningAction(CancellationToken clt)
{
Task.Run(() => { Thread.Sleep(5000);
Debug.WriteLine("Action executed");
});
}
//Action overload's target
private async void LongRunningActionAsync(CancellationToken clt)
{
await Task.Run(() => { Thread.Sleep(5000);
Debug.WriteLine("Action async executed");
});
}
}
}
だからアクション内部Task.Run
を持っていることのポイントは何ですか?