我有两个后台服务。其中一个通过串行端口执行测量,另一个称为 SettingsWorker 获取测量设置(如传感器数量、模块、获取延迟等)并通过静态变量共享它。
public class MeasurementWorker : BackgroundService
while (!stoppingToken.IsCancellationRequested)
{
try
{
....
await Task.Delay(_measurementSettings.MeasurementFetchPeriod, stoppingToken);
}
}
public class SettingsWorker : BackgroundService
while (!stoppingToken.IsCancellationRequested)
{
try
{
....
await Task.Delay(_measurementSettings.MeasurementFetchPeriod, stoppingToken);
}
}
这是我的程序课。
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<SettingsWorker>();
services.AddHostedService<MeasurementWorker>();
}).UseSerilog();
当我的应用程序始终启动时,必须首先执行 SettingWorker 并设置共享静态变量。在我的观察中,排序服务。AddHostedService 在应用程序启动时更改执行顺序。
如果我首先添加 SettingsWorker 是否保证它将首先执行后台任务?
如果在我的情况下有多个后台服务,当任何服务尚未完成执行且尚未到达 await Task.Delay 行时,它是否可能会停止并且另一个后台服务开始运行只是因为已达到延迟时间。