diff --git a/src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs b/src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs
index 3e851a68f0..11ba81b585 100644
--- a/src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs
+++ b/src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs
@@ -273,22 +273,25 @@ namespace Umbraco.Tests.Scheduling
{
}
- public override void Run()
+ public override void PerformRun()
{
Thread.Sleep(500);
}
- public override void Cancel()
- {
-
- }
}
public abstract class BaseTask : IBackgroundTask
{
+ public bool WasCancelled { get; set; }
+
public Guid UniqueId { get; protected set; }
- public abstract void Run();
+ public abstract void PerformRun();
+ public void Run()
+ {
+ PerformRun();
+ Ended = DateTime.Now;
+ }
public Task RunAsync()
{
throw new NotImplementedException();
@@ -299,7 +302,10 @@ namespace Umbraco.Tests.Scheduling
get { return false; }
}
- public abstract void Cancel();
+ public virtual void Cancel()
+ {
+ WasCancelled = true;
+ }
public DateTime Queued { get; set; }
public DateTime Started { get; set; }
@@ -307,7 +313,7 @@ namespace Umbraco.Tests.Scheduling
public virtual void Dispose()
{
- Ended = DateTime.Now;
+
}
}
diff --git a/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs b/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
index d11ff03d66..ffba7a1e0a 100644
--- a/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
+++ b/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
@@ -8,26 +8,6 @@ using Umbraco.Core.Logging;
namespace Umbraco.Web.Scheduling
{
-
- internal class BackgroundTaskRunnerOptions
- {
- public BackgroundTaskRunnerOptions()
- {
- DedicatedThread = false;
- PersistentThread = false;
- OnlyProcessLastItem = false;
- }
-
- public bool DedicatedThread { get; set; }
- public bool PersistentThread { get; set; }
-
- ///
- /// If this is true, the task runner will skip over all items and only process the last/final
- /// item registered
- ///
- public bool OnlyProcessLastItem { get; set; }
- }
-
///
/// This is used to create a background task runner which will stay alive in the background of and complete
/// any tasks that are queued. It is web aware and will ensure that it is shutdown correctly when the app domain
@@ -174,7 +154,8 @@ namespace Umbraco.Web.Scheduling
//skip if this is not the last
if (_options.OnlyProcessLastItem && _tasks.Count > 0)
{
- //NOTE: don't raise canceled event, we're shutting down
+ //NOTE: don't raise canceled event, we're shutting down, just dispose
+ remainingTask.Dispose();
continue;
}
@@ -372,6 +353,9 @@ namespace Umbraco.Web.Scheduling
{
var handler = TaskCancelled;
if (handler != null) handler(this, e);
+
+ //dispose it
+ e.Task.Dispose();
}
diff --git a/src/Umbraco.Web/Scheduling/BackgroundTaskRunnerOptions.cs b/src/Umbraco.Web/Scheduling/BackgroundTaskRunnerOptions.cs
new file mode 100644
index 0000000000..c42fcd681a
--- /dev/null
+++ b/src/Umbraco.Web/Scheduling/BackgroundTaskRunnerOptions.cs
@@ -0,0 +1,23 @@
+namespace Umbraco.Web.Scheduling
+{
+ internal class BackgroundTaskRunnerOptions
+ {
+ //TODO: Could add options for using a stack vs queue if required
+
+ public BackgroundTaskRunnerOptions()
+ {
+ DedicatedThread = false;
+ PersistentThread = false;
+ OnlyProcessLastItem = false;
+ }
+
+ public bool DedicatedThread { get; set; }
+ public bool PersistentThread { get; set; }
+
+ ///
+ /// If this is true, the task runner will skip over all items and only process the last/final
+ /// item registered
+ ///
+ public bool OnlyProcessLastItem { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 8cd6f55046..23ba69cf31 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -498,6 +498,7 @@
+