diff options
author | Ignacio Etcheverry <neikeq@users.noreply.github.com> | 2018-09-12 22:08:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-12 22:08:54 +0200 |
commit | 8704b7787624da98cece35c1b8b8e51bde709488 (patch) | |
tree | 398ab2ee1e88e3b853c6157458362dced14d64da /modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs | |
parent | 4cd3dd821932660a7d89d90da7626fa46c07ac39 (diff) | |
parent | 995a40e8efa9f7a868a6706e30c476305e16180b (diff) | |
download | redot-engine-8704b7787624da98cece35c1b8b8e51bde709488.tar.gz |
Merge pull request #22007 from neikeq/<name_of_your_new_branch>
Move modules/mono/glue/cs_files to modules/mono/glue/Managed/Files
Diffstat (limited to 'modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs')
-rw-r--r-- | modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs b/modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs new file mode 100644 index 0000000000..e727781d63 --- /dev/null +++ b/modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs @@ -0,0 +1,25 @@ +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Threading; + +namespace Godot +{ + public class GodotSynchronizationContext : SynchronizationContext + { + private readonly BlockingCollection<KeyValuePair<SendOrPostCallback, object>> queue = new BlockingCollection<KeyValuePair<SendOrPostCallback, object>>(); + + public override void Post(SendOrPostCallback d, object state) + { + queue.Add(new KeyValuePair<SendOrPostCallback, object>(d, state)); + } + + public void ExecutePendingContinuations() + { + KeyValuePair<SendOrPostCallback, object> workItem; + while (queue.TryTake(out workItem)) + { + workItem.Key(workItem.Value); + } + } + } +} |