diff --git a/AsbCloudInfrastructure/Background/BackgroundWorker.cs b/AsbCloudInfrastructure/Background/BackgroundWorker.cs index 825f1b66..1c641019 100644 --- a/AsbCloudInfrastructure/Background/BackgroundWorker.cs +++ b/AsbCloudInfrastructure/Background/BackgroundWorker.cs @@ -31,6 +31,7 @@ public class BackgroundWorker : BackgroundService /// Работа выполняемая в данный момент /// public Work? CurrentWork; + private bool isRuning; /// /// последние 16 завершившиеся с ошибкой @@ -54,6 +55,9 @@ public class BackgroundWorker : BackgroundService protected override async Task ExecuteAsync(CancellationToken token) { + if (isRuning) + return; + isRuning = true; Trace.TraceInformation($"{GetType().Name} started"); while (!token.IsCancellationRequested && works.TryDequeue(out CurrentWork)) { @@ -82,6 +86,7 @@ public class BackgroundWorker : BackgroundService Trace.TraceError(MainLoopLastException); } } + isRuning = false; } /// @@ -96,7 +101,7 @@ public class BackgroundWorker : BackgroundService { works.Enqueue(work); if (ExecuteTask is null || ExecuteTask.IsCompleted) - StartAsync(CancellationToken.None).Wait(); + StartAsync(CancellationToken.None); } /// diff --git a/AsbCloudInfrastructure/Background/PeriodicBackgroundWorker.cs b/AsbCloudInfrastructure/Background/PeriodicBackgroundWorker.cs index edc3aa8e..0a7e96dd 100644 --- a/AsbCloudInfrastructure/Background/PeriodicBackgroundWorker.cs +++ b/AsbCloudInfrastructure/Background/PeriodicBackgroundWorker.cs @@ -103,7 +103,7 @@ public class PeriodicBackgroundWorker : BackgroundService var periodic = new WorkPeriodic(work, period); works.Add(periodic); if (ExecuteTask is null || ExecuteTask.IsCompleted) - StartAsync(CancellationToken.None).Wait(); + StartAsync(CancellationToken.None); } private WorkPeriodic? GetNext()