.Net MVC - HostingEnvironment.QueueBackgroundWorkItem 后台进程实现
.Net MVC - Background process implementation with HostingEnvironment.QueueBackgroundWorkItem
我正在寻找类似于 MVC 中的后台进程的东西。
要求是我应该 运行 .Net MVC 应用程序中的后台 process/thread,它将是异步的并且不等待前台/ UI 中的操作。类似于发射后忘记。
我正在尝试使用 HostingEnvironment.QueueBackgroundWorkItem。可以使用它还是推荐其他任何东西?我是 MVC 中的电枢,在此先感谢。
如果你想在控制器中使用后台作业HostingEnvironment.QueueBackgroundWorkItem
是正常的解决方案。
例如,启动后台操作并忘记
public class HomeController : Controller
{
[HttpPost]
public ActionResult Index()
{
Action<CancellationToken> workItem = SomeBackGroundWork;
// start background work and forget
HostingEnvironment.QueueBackgroundWorkItem(workItem);
return RedirectToAction("Home");
}
private async void SomeBackGroundWork(CancellationToken cancellationToken)
{
await Task.Delay(2000,cancellationToken);
// or you can do http request to web site
using (var client = new HttpClient())
{
var response = await client.PostAsync("http://google.com", new StringContent(""), cancellationToken);
}
}
}
我正在寻找类似于 MVC 中的后台进程的东西。
要求是我应该 运行 .Net MVC 应用程序中的后台 process/thread,它将是异步的并且不等待前台/ UI 中的操作。类似于发射后忘记。
我正在尝试使用 HostingEnvironment.QueueBackgroundWorkItem。可以使用它还是推荐其他任何东西?我是 MVC 中的电枢,在此先感谢。
如果你想在控制器中使用后台作业HostingEnvironment.QueueBackgroundWorkItem
是正常的解决方案。
例如,启动后台操作并忘记
public class HomeController : Controller
{
[HttpPost]
public ActionResult Index()
{
Action<CancellationToken> workItem = SomeBackGroundWork;
// start background work and forget
HostingEnvironment.QueueBackgroundWorkItem(workItem);
return RedirectToAction("Home");
}
private async void SomeBackGroundWork(CancellationToken cancellationToken)
{
await Task.Delay(2000,cancellationToken);
// or you can do http request to web site
using (var client = new HttpClient())
{
var response = await client.PostAsync("http://google.com", new StringContent(""), cancellationToken);
}
}
}