From cd9505e12817642c4d51ad016900b745bb2df9f2 Mon Sep 17 00:00:00 2001 From: zetanova Date: Wed, 22 Nov 2023 09:14:30 +0100 Subject: [PATCH 1/2] hide task scheduler --- src/core/Akka/Dispatch/Dispatchers.cs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/core/Akka/Dispatch/Dispatchers.cs b/src/core/Akka/Dispatch/Dispatchers.cs index dfd0556d796..5952446d424 100644 --- a/src/core/Akka/Dispatch/Dispatchers.cs +++ b/src/core/Akka/Dispatch/Dispatchers.cs @@ -185,10 +185,9 @@ public void ReadChannel() /// internal sealed class TaskSchedulerExecutor : ExecutorService { - /// - /// The scheduler - /// - private TaskScheduler _scheduler; + readonly TaskFactory _factory; + + readonly CancellationTokenSource _cts = new CancellationTokenSource(); /// /// TBD @@ -197,7 +196,7 @@ internal sealed class TaskSchedulerExecutor : ExecutorService /// TBD public TaskSchedulerExecutor(string id, TaskScheduler scheduler) : base(id) { - _scheduler = scheduler; + _factory = new TaskFactory(_cts.Token, TaskCreationOptions.HideScheduler, TaskContinuationOptions.HideScheduler, scheduler); } // cache the delegate used for execution to prevent allocations @@ -209,8 +208,7 @@ public TaskSchedulerExecutor(string id, TaskScheduler scheduler) : base(id) /// TBD public override void Execute(IRunnable run) { - var t = new Task(Executor, run); - t.Start(_scheduler); + _factory.StartNew(Executor, run); } /// @@ -218,8 +216,8 @@ public override void Execute(IRunnable run) /// public override void Shutdown() { - // clear the scheduler - _scheduler = null; + // cancel queued tasks + _cts.Cancel(); } } From 062adfe25a430e294a9ebbfa64b76775f376b2d5 Mon Sep 17 00:00:00 2001 From: zetanova Date: Fri, 26 Jan 2024 19:13:55 +0100 Subject: [PATCH 2/2] unset continuation option --- src/core/Akka/Dispatch/Dispatchers.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/Akka/Dispatch/Dispatchers.cs b/src/core/Akka/Dispatch/Dispatchers.cs index 5952446d424..23a7ae5a158 100644 --- a/src/core/Akka/Dispatch/Dispatchers.cs +++ b/src/core/Akka/Dispatch/Dispatchers.cs @@ -196,7 +196,7 @@ internal sealed class TaskSchedulerExecutor : ExecutorService /// TBD public TaskSchedulerExecutor(string id, TaskScheduler scheduler) : base(id) { - _factory = new TaskFactory(_cts.Token, TaskCreationOptions.HideScheduler, TaskContinuationOptions.HideScheduler, scheduler); + _factory = new TaskFactory(_cts.Token, TaskCreationOptions.HideScheduler, TaskContinuationOptions.None, scheduler); } // cache the delegate used for execution to prevent allocations