设计本官方网站下载,南京seo优化公司,中徽园林建设有限公司网站,wordpress怎么制作菜单在我们应用程序中常常会有一些执行后台任务和任务调度的需求#xff0c;那如何在 ASP.Net Core 中实现呢#xff1f;可以利用 Azure WebJobs 或者其他一些第三方任务调度框架#xff0c;如#xff1a;Quartz 和 Hangfire。在 ASP.Net Core 中#xff0c;也可以将 后台任务… 在我们应用程序中常常会有一些执行后台任务和任务调度的需求那如何在 ASP.Net Core 中实现呢可以利用 Azure WebJobs 或者其他一些第三方任务调度框架如Quartz 和 Hangfire。在 ASP.Net Core 中也可以将 后台任务 作为托管服务的模式所谓的 托管服务 只需要实现框架中的 IHostedService 接口并囊括进你需要的业务逻辑作为后台任务这篇文章将会讨论如何在 ASP.Net Core 中构建托管服务。创建托管服务 要想创建托管服务只需要实现 IHostedService 接口即可下面就是 IHostedService 接口的声明。
public interface IHostedService
{Task StartAsync(CancellationToken cancellationToken);Task StopAsync(CancellationToken cancellationToken);
}这一节中我们在 ASP.Net Core 中做一个极简版的 托管服务, 首先自定义一个 MyFirstHostedService 托管类代码如下public class MyFirstHostedService : IHostedService{protected async override Task ExecuteAsync(CancellationToken token){throw new NotImplementedException();}}创建 BackgroundService 有一点要注意上一节的 MyFirstHostedService 实现了 IHostedService 接口实际开发中并不需要这样做因为 .Net Core 中已经提供了抽象类 BackgroundService所以接下来重写抽象类的 ExecuteAsync 方法即可如下代码所示public class MyFirstHostedService : BackgroundService{protected async override Task ExecuteAsync(CancellationToken token){throw new NotImplementedException();}}下面的代码片段展示了一个简单的 Log 方法用于记录当前时间到文件中这个方法由 托管服务 触发。private async Task Log(){using (StreamWriter sw new StreamWriter(D:\log.txt,true)){await sw.WriteLineAsync(DateTime.Now.ToLongTimeString());}}使用 ExecuteAsync 方法 接下来看看如何实现 ExecuteAsync 方法这个方法的逻辑就是周期性second/s的调用 Log() 方法,如下代码所示protected async override Task ExecuteAsync(CancellationToken token){while (!token.IsCancellationRequested){await Log();await Task.Delay(1000, token);}}好了下面是完整的 MyFirstHostedService 类代码仅供参考。
using Microsoft.Extensions.Hosting;
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace HostedServicesApp
{public class MyFirstHostedService : BackgroundService{protected async override Task ExecuteAsync(CancellationToken token){while (!token.IsCancellationRequested){await Log();await Task.Delay(1000, token);}}private async Task Log(){using (StreamWriter sw new StreamWriter(D:\log.txt,true)){await sw.WriteLineAsync(DateTime.Now.ToLongTimeString());}}}
}托管服务注册 托管服务类已经写好了要想注入到 Asp.NET Core 中需要在 Startup.ConfigureServices 中将 托管服务类 注入到 ServiceCollection 中如下代码所示public void ConfigureServices(IServiceCollection services){services.AddHostedServiceMyFirstHostedService();services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);} 当把应用程序跑起来后你会看见程序每秒都会往 D:\log.txt 文件中记录日志。在 IHostedService 中提供的 StartAsync 和 StopAsync 可用于在 ASP.NET Core 中执行或停止后台任务你可以用它在你的应用程序中更新数据或其他操作还有这些周期性业务逻辑是跑在后台线程中的这样就不会导致主请求线程的阻塞。译文链接https://www.infoworld.com/article/3390741/how-to-use-ihostedservice-in-aspnet-core.html