【问题标题】:.net core block specific BackgroundService if another one is already running如果另一个已经在运行,.net 核心块特定的 BackgroundService
【发布时间】:2020-01-04 10:38:07
【问题描述】:

在 .net core 3.1 worker 服务项目中有两个不同的 worker (BackgroundService):

services.AddHostedService<MainTaskWorker>();
services.AddHostedService<SideTaskWorker>();

如果MainTaskWorker 正在运行,是否可以阻止SideTaskWorker

Worker 实现(简化) - MainSide 相同:

public class SideTaskWorker : BackgroundService
{
    private readonly ILogger<SideTaskWorker> _logger;

    public SideTaskWorker(ILogger<SideTaskWorker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("SideTask running at: {time}", DateTime.UtcNow);
        }
    }
}

附加信息:

MainTask - 每天运行,需要几分钟/几小时才能完成

SideTask - 每 15 分钟运行一次,需要几秒/分钟才能完成

SideTaskWorkerMainTaskWorker 是两个不同的类,ExecuteAsync 方法的实现不同。问题是两个工作人员都在修改相同的数据库表,而当MainTask 当前正在运行时,我不想使用SideTask 触摸表。

SideTask 不是业务关键,可以被阻止几分钟/几小时/几天。 db 表中的数据不应更改,因为MainTask 的功能之一是根据 db 中的数据生成报告

【问题讨论】:

  • 您应该提供更多信息,说明您希望如何以及何时阻止BackgroundService
  • 您是否只想在这些方法同时尝试访问您的表时防止数据冲突?
  • 需要防止在主任务运行时更改数据。 MainTask 运行时,SideTask 不应更改数据。
  • 所以我想从你的问题来看,如果代码不会连续多次在SideTask 中执行,这并不重要?
  • 是的,SideTask 不是关键业务,可以被阻止几分钟/几小时/几天。 db 表中的数据不应更改,因为MainTask 的功能之一是根据 db 中的数据生成报告

标签: c# asp.net-core .net-core


【解决方案1】:

我不确定您的方法到底在做什么,以及在什么情况下您想完全阻止 SideTaskWorker。此外,我假设您想阻止您的 ExecuteAsync 方法。

你应该看看SimpaphoreSlim

不确定它是否真的符合您的需求,但在您的情况下,我会创建一个 bool 来指示您是否要阻止 SideTaskWorker 方法。假设在 SideTaskWorker 方法中发生了其他工作,您需要检查 bool 是否更改为 true,如果是这种情况,您应该调用 await semaphore.WaitAsync(); 并且只要您想让 SideTaskWorker 继续致电semaphore.Release();。此外,您应该将 bool 设置回 false

请注意,这可能会变得非常肮脏,尤其是在 ASP.Net Core 中使用 DI。您可能想要创建自己的处理程序并查看Semaphore,您可以为其命名。

【讨论】:

  • 用附加信息更新了问题 - 我不清楚如何在我的情况下使用它,因为工人是两个不同的类,彼此之间没有任何依赖关系(它们只是在同一个程序集中)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多