gpt4 book ai didi

c# - 如何在 .net core 3.0 中并行运行多个 BackgroundService?

转载 作者:行者123 更新时间:2023-12-03 22:03:34 26 4
gpt4 key购买 nike

如何并行运行多个 IHostedServices?

我在 .Net Core 3.0 中使用 WorkerService 并希望两个服务并行运行。目前,第二个服务正在等待第一个服务完成。这两种服务都应该无休止地运行。

    public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<ServiceA>();
services.AddHostedService<ServiceB>();
});
}

一个服务看起来像这样:
public class ServiceA : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
do
{
Console.WriteLine("Sample");
await Task.Delay(5000, stoppingToken);
} while (!stoppingToken.IsCancellationRequested);
}
}

//编辑:
我非常不情愿地使用 Task.Run(() => method());这样的方法。但当然这种方式总是有效的:
public class ServiceA : BackgroundService
{
public override Task StartAsync(CancellationToken cancellationToken)
{
Task.Factory.StartNew(() => ExecuteAsync(cancellationToken), cancellationToken);
return Task.CompletedTask;
}
}

最佳答案

我问了自己一个类似的问题并进行了一些搜索,但找不到好的答案。
我解决了在 Task.Run 中运行每个后台服务的问题带有来自 BackgroundService.ExecuteAsync() 的取消 token
我有 2 个像你一样的服务。

public class BackgroundService1: BackgroundService
{
public BackgroundService1()
{
}
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
Task.Run(async () =>
{
await DoWork(stoppingToken);
}, stoppingToken);
return Task.CompletedTask;
}
}
//第二个服务就像第一个:
public class BackgroundService2: BackgroundService
{
public BackgroundService2()
{
}
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
Task.Run(async () =>
{
await DoWork(stoppingToken);
}, stoppingToken);
return Task.CompletedTask;
}
}
并在 Program.cs 中注册它们
    public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<BackgroundService1>();
services.AddHostedService<BackgroundService2>();
})
.UseWindowsService()

关于c# - 如何在 .net core 3.0 中并行运行多个 BackgroundService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com