diff --git a/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs b/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs index 7f3606474a..e48063ca22 100644 --- a/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs +++ b/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs @@ -260,6 +260,8 @@ namespace Umbraco.Web.Scheduling { if (token.IsCancellationRequested || _tasks.Count == 0) { + LogHelper.Debug>("_isRunning = false"); + _isRunning = false; // done if (_options.PreserveRunningTask == false) _runningTask = null; diff --git a/src/Umbraco.Web/Scheduling/BackgroundTaskRunnerAwaiter.cs b/src/Umbraco.Web/Scheduling/BackgroundTaskRunnerAwaiter.cs index 8332573e07..0c38ee43a3 100644 --- a/src/Umbraco.Web/Scheduling/BackgroundTaskRunnerAwaiter.cs +++ b/src/Umbraco.Web/Scheduling/BackgroundTaskRunnerAwaiter.cs @@ -1,6 +1,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; +using Umbraco.Core.Logging; namespace Umbraco.Web.Scheduling { @@ -27,16 +28,23 @@ namespace Umbraco.Web.Scheduling _tcs = new TaskCompletionSource(); + _awaiter = _tcs.Task.GetAwaiter(); + if (_runner.IsRunning) { - _runner.Completed += (s, e) => _tcs.SetResult(0); + _runner.Completed += (s, e) => + { + LogHelper.Debug>("Setting result"); + + _tcs.SetResult(0); + }; } else { //not running, just set the result _tcs.SetResult(0); } - _awaiter = _tcs.Task.GetAwaiter(); + } public BackgroundTaskRunnerAwaiter GetAwaiter() @@ -49,7 +57,12 @@ namespace Umbraco.Web.Scheduling /// public bool IsCompleted { - get { return _runner.IsRunning == false; } + get + { + LogHelper.Debug>("IsCompleted :: " + _tcs.Task.IsCompleted + ", " + (_runner.IsRunning == false)); + //Need to check if the task is completed because it might already be done on the ctor and the runner never runs + return _tcs.Task.IsCompleted || _runner.IsRunning == false; + } } public void OnCompleted(Action continuation)