马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
不管是在控制台程序还是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:\Users\ZhouXinfeng\tmp\hostservice\bin\Debug\net8.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...
复制代码 参考链接
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |