gpt4 book ai didi

c# - 多个 Worker 在 .NET Core 中并行运行

转载 作者:行者123 更新时间:2023-12-05 05:03:11 27 4
gpt4 key购买 nike

我在 .NET Core 中创建了一个 Worker Service 项目,目的是让 3 名独立 worker 参与。所有这 3 个 worker 应该并行运行并且独立于其他 worker。这个辅助服务作为一个整体将作为 Windows 服务运行。

在主 Program.cs 中,我注册了 3 个 worker ,如下所示:

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
IConfiguration configuration = hostContext.Configuration;
services.AddHostedService<WorkerA>();
services.AddHostedService<WorkerB>();
services.AddHostedService<WorkerC>();
});
}

每个 worker 代码如下,做他们预定的工作:

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
WorkerA_DoWork();
await Task.Delay(6000, stoppingToken);
}
}

问题陈述:当我执行项目时,我遇到了一些问题,例如,当 WorkerA() 没有任何进程要运行时,WorkerB()(或)WorkerC() 没有开始他们的工作。我认为它基本上是在等待 WorkerA() 做一些事情,然后 WorkerB() 或 WorkerC() 才能开始工作。

请告知他们如何独立工作,即:每个 worker 不应该等待其他 worker ,应该独立运行。

最佳答案

When I execute the project, I am facing few issues like, when WorkerA() doesn't have any process to run, WorkerB() (or) WorkerC() do not start their work. I think it is basically waiting for WorkerA() to do something before WorkerB() or WorkerC() can start doing their work.

.NET Core 允许任意数量的托管服务;然而,它开始连续执行它们。所以这段代码的问题:

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
WorkerA_DoWork();
await Task.Delay(6000, stoppingToken);
}
}

WorkerA_DoWork 是同步的。即,它正在同步等待工作。

解决方案可以是以下两种情况之一。要么使“获取下一个工作项”方法异步:

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await WorkerA_DoWorkAsync();
await Task.Delay(6000, stoppingToken);
}
}

或者将整个 ExecuteAsync 包装在 Task.Run 中:

protected override Task ExecuteAsync(CancellationToken stoppingToken) => Task.Run(async () =>
{
while (!stoppingToken.IsCancellationRequested)
{
WorkerA_DoWork();
await Task.Delay(6000, stoppingToken);
}
});

关于c# - 多个 Worker 在 .NET Core 中并行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61835271/

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