- A+
所属分类:.NET技术
不管是在控制台程序还是asp.net core
程序中,我们经常会有用到一个需要长时间运行的后台任务的需求。通常最直觉的方式是使用Thread
实例来新建一个线程,但是这样需要自行管理线程的启动和停止。
在.net core
中提供了一个继承自IHostedService
的基类BackgroudService
能够方便地实现一个长程的后台任务。
为了使用这个基类进行开发,我们需要向项目中添加包:Microsoft.Extensions.Hosting
然后新建一个后台任务类AppHostedService
并实现ExecuteAsync
方法即可。
一个简单的ExecuteAsync
任务实现
protected override async Task<object> ExecuteAsync(CancellationToken stoppingToken) { int loop = 0; while (!stoppingToken.IsCancellationRequested) { try { Console.WriteLine("Backgroun service working..."); await Task.Delay(5000, stoppingToken); } catch(TaskCanceledException exception) { Console.WriteLine($"TaskCanceledException Error: {exception.Message}"); } } return Task.CompletedTask; }
另外在主程序中使用Host.CreateDefaultBuilder()
来创建运行程序的托管服务并加入我们刚刚创建的AppHostedService
await Host.CreateDefaultBuilder() .UseConsoleLifetime() .ConfigureServices((context, services) => { services.AddHostedService<AppHostService>(); }) .RunConsoleAsync();
创建完成后编译运行,将看到托管服务的启动输出信息和在任务中周期性输出的信息。完整代码见Gist
Hello, World! Start Async AppHostService Backgroun service working... info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0] Content root path: C:UsersZhouXinfengtmphostservicebinDebugnet8.0 Background service working... Background service working... Background service working... Background service working... Background service working... Background service working... Background service working... Background service working...