翼度科技»论坛 编程开发 .net 查看内容

dot net core使用BackgroundService运行一个后台服务

5

主题

5

帖子

15

积分

新手上路

Rank: 1

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


来源:https://www.cnblogs.com/mrchip/p/18215599
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具