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

打印 上一主题 下一主题

主题 1033|帖子 1033|积分 3099

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
不管是在控制台程序还是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...
复制代码
参考链接


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表