gpt4 book ai didi

.net-core - .net core 工作人员服务中有多个工作人员?

转载 作者:行者123 更新时间:2023-12-03 00:03:50 25 4
gpt4 key购买 nike

dot net core 3.0工作线程服务模板如下所示:

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
});
}

“Worker”类派生自BackgroundService。它每 1000 毫秒循环将日志写入控制台。

我的问题:

我可以同时运行多个“Worker”吗? (我知道我可以创建另一个类“Worker2”。但是我可以运行同一类“Worker”的两个副本吗?)

如果是,我如何配置两个具有不同配置或参数的“Worker”,例如两个具有不同循环间隔的Worker? (因为“Worker”类的实例是由 DI 框架创建的。我不知道如何将不同的配置/参数传递给“Worker”的两个不同实例)

最佳答案

您可以有一个“父”工作人员来启动“真正的”工作人员,如下所示...

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var workers = new List<Task>();
foreach(var delay in _config.LoopIntervals)
workers.Add(DoRealWork(delay, stoppingToken));

await Task.WhenAll(workers.ToArray());
}
}

然后...

        private async Task DoRealWork(int delay, CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("worker {delay} checking in at {time}", delay, DateTimeOffset.Now);
await Task.Delay(delay, stoppingToken);
}
}

_config 从 appSettings.json 填充并传递给 Worker 的构造函数,如下所示...

var cfg = hostContext.Configuration.GetSection(nameof(WorkerConfig)).Get<WorkerConfig>();
services.AddSingleton(cfg);
services.AddHostedService<Worker>();

和应用程序设置...

{
"WorkerConfig": {
"LoopIntervals": [ 1000, 2000, 3000 ]
}
}

关于.net-core - .net core 工作人员服务中有多个工作人员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58229410/

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