asp.net-core – ASP.NET 5中RegisterObject / QueueBackgroundWor
|
在“System.Web”ASP.NET中,可以通过RegisterObject / QueueBackgroundWorkItem注册后台工作,以便参与IIS的关闭序列(完成90秒宽限期),但我很难找到完全等效的ASP.NET 5. 查看 IIS集成层尚未开源(如果有的话),因此很难看出该实现如何映射事物. 我错过了一个API吗?我应该通过CancellationToken.Register()执行阻塞关闭吗?这是“vNext”中遗漏的东西吗? 任何启蒙都会受到高度赞赏. 解决方法我使用基于Katana的Hangfire实现作为灵感来创建以下内容.除了检查IIS Express终止时关机代码运行之外,它没有任何测试,但它可以作为概念证明.这里的设计显然不适用于“即发即忘”任务,因为它们可以在关机前触发.但它确实适用于幂等队列处理器(假设已禁用空闲关闭超时) public static class BackgroundServiceExtensions
{
public static void UseBackgroundService(
this IApplicationBuilder builder,Func<CancellationToken,Task> service)
{
var lifetime = (IApplicationLifetime)builder.ApplicationServices
.GetService(typeof(IApplicationLifetime));
var stoppingToken = lifetime.ApplicationStopping;
var stoppedToken = lifetime.ApplicationStopped;
// This,in particular,would need to be properly thought out,// preferably including an execution context to minimise threadpool use
// for async-heavy background services
Task serviceTask = Task.Run(() => service(stoppingToken));
stoppedToken.Register(() =>
{
try
{
// Block (with timeout) to allow graceful shutdown
if (!serviceTask.Wait(TimeSpan.FromSeconds(30)))
{
// Log: Background service didn't gracefully shutdown.
// It will be terminated with the host process
}
}
catch(Exception)
{
// Ignored
}
});
}
}
然后可以这样使用: app.UseBackgroundService(async cancellationToken =>
{
while (!cancellationToken.IsCancellationRequested)
{
System.Diagnostics.Debug.WriteLine("Tick...");
try
{
// Use cancellationToken for anything that is (logically) cancellable
await Task.Delay(1000,cancellationToken);
}
catch(TaskCanceledException)
{ }
}
System.Diagnostics.Debug.WriteLine("Cancellation requested,shutting down...");
}); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何将数组从Asp.net服务器端传递到客户端的Javascript函数
- asp.net-mvc – Html.CheckBox即使模型值为true也不进行检查
- asp.net-mvc-3 – 从剃刀视图引用资源文件
- asp.net-mvc – ASP.NET MVC如何知道方法是一种动作方法?
- asp.net-mvc – ASP.NET MVC母版页
- asp.net-mvc – ASP.NET MVC:调用存储过程的最佳方式
- asp.net-mvc-3 – 似乎无法有条件地使用Razor的foreach和if
- ASP.NET MVC 4全局授权过滤器强制在AllowAnonymous操作上登
- asp.net-mvc – 将SignalR与Azure表存储一起使用 – 什么架
- asp.net – 初学者指南,了解如何在Visual Studio中使用Subv
- asp.net – 如何使用resxresourcewriter写入所有
- asp.net-mvc – 无法加载文件或程序集’Microsof
- asp.net-mvc-4 – ASP.NET MVC 4应用程序捆绑和分
- asp.net – 自定义控件变为通用的“UserControl”
- 解决“这个操作需要IIS集成管道模式”在ASP.net
- asp.net-mvc – 为什么ASP.NET MVC在从IE而不是f
- 我们可以将asp.net mvc 4应用程序部署到带有Wind
- asp.net-mvc-3 – ASP.NET MVC 3/4是否有任何响应
- asp.net – 访问在DelegatingHandler中执行的当前
- 如何在asp.net转发器控件中获取项目点击事件?
