summaryrefslogtreecommitdiff
path: root/modules/mono/glue/Managed/Files/GodotTaskScheduler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'modules/mono/glue/Managed/Files/GodotTaskScheduler.cs')
-rw-r--r--modules/mono/glue/Managed/Files/GodotTaskScheduler.cs91
1 files changed, 0 insertions, 91 deletions
diff --git a/modules/mono/glue/Managed/Files/GodotTaskScheduler.cs b/modules/mono/glue/Managed/Files/GodotTaskScheduler.cs
deleted file mode 100644
index 8eaeea50dc..0000000000
--- a/modules/mono/glue/Managed/Files/GodotTaskScheduler.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Godot
-{
- public class GodotTaskScheduler : TaskScheduler
- {
- internal GodotSynchronizationContext Context { get; }
- private readonly LinkedList<Task> _tasks = new LinkedList<Task>();
-
- public GodotTaskScheduler()
- {
- Context = new GodotSynchronizationContext();
- SynchronizationContext.SetSynchronizationContext(Context);
- }
-
- protected sealed override void QueueTask(Task task)
- {
- lock (_tasks)
- {
- _tasks.AddLast(task);
- }
- }
-
- protected sealed override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued)
- {
- if (SynchronizationContext.Current != Context)
- return false;
-
- if (taskWasPreviouslyQueued)
- TryDequeue(task);
-
- return TryExecuteTask(task);
- }
-
- protected sealed override bool TryDequeue(Task task)
- {
- lock (_tasks)
- {
- return _tasks.Remove(task);
- }
- }
-
- protected sealed override IEnumerable<Task> GetScheduledTasks()
- {
- lock (_tasks)
- {
- foreach (Task task in _tasks)
- yield return task;
- }
- }
-
- public void Activate()
- {
- ExecuteQueuedTasks();
- Context.ExecutePendingContinuations();
- }
-
- private void ExecuteQueuedTasks()
- {
- while (true)
- {
- Task task;
-
- lock (_tasks)
- {
- if (_tasks.Any())
- {
- task = _tasks.First.Value;
- _tasks.RemoveFirst();
- }
- else
- {
- break;
- }
- }
-
- if (task != null)
- {
- if (!TryExecuteTask(task))
- {
- throw new InvalidOperationException();
- }
- }
- }
- }
- }
-}