From 4e467cf67abdbcb6163ccdf1933819d143ea10af Mon Sep 17 00:00:00 2001 From: Ryan Stecker Date: Fri, 13 Jul 2018 19:38:41 -0500 Subject: [PATCH] Dispatch callbacks separately from the IRC ticks. Fixes #22. Is this thread safe? YOLO --- SteamIrcBot/Service/ServiceDispatcher.cs | 25 ++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/SteamIrcBot/Service/ServiceDispatcher.cs b/SteamIrcBot/Service/ServiceDispatcher.cs index 0bbffd8..94e412f 100644 --- a/SteamIrcBot/Service/ServiceDispatcher.cs +++ b/SteamIrcBot/Service/ServiceDispatcher.cs @@ -13,18 +13,20 @@ class ServiceDispatcher public static ServiceDispatcher Instance { get { return _instance; } } - Task dispatcher; + Task mainDispatcher; + Task ircDispatcher; CancellationTokenSource cancelToken; ServiceDispatcher() { cancelToken = new CancellationTokenSource(); - dispatcher = new Task( ServiceTick, cancelToken.Token, TaskCreationOptions.LongRunning ); + mainDispatcher = new Task(MainTick, cancelToken.Token, TaskCreationOptions.LongRunning); + ircDispatcher = new Task(IrcTick, cancelToken.Token, TaskCreationOptions.LongRunning); } - void ServiceTick() + void MainTick() { while ( true ) { @@ -32,16 +34,27 @@ void ServiceTick() break; Steam.Instance.Tick(); - IRC.Instance.Tick(); RSS.Instance.Tick(); } } + void IrcTick() + { + while (true) + { + if (cancelToken.IsCancellationRequested) + break; + + IRC.Instance.Tick(); + } + } + public void Start() { - dispatcher.Start(); + mainDispatcher.Start(); + ircDispatcher.Start(); } public void Stop() @@ -52,7 +65,7 @@ public void Stop() public void Wait() { - dispatcher.Wait(); + Task.WaitAll(mainDispatcher, ircDispatcher); } }