From dcdb71f12156758e60f883f8e1c3c49d16c05f79 Mon Sep 17 00:00:00 2001 From: Ogoun Date: Thu, 30 Jan 2020 14:33:28 +0300 Subject: [PATCH 1/3] Update Multiprocessor.cs --- ZeroLevel/Services/Utils/Multiprocessor.cs | 26 +++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/ZeroLevel/Services/Utils/Multiprocessor.cs b/ZeroLevel/Services/Utils/Multiprocessor.cs index c30dbdb..acd0142 100644 --- a/ZeroLevel/Services/Utils/Multiprocessor.cs +++ b/ZeroLevel/Services/Utils/Multiprocessor.cs @@ -72,18 +72,28 @@ namespace ZeroLevel.Utils public void Dispose() { _is_disposed = true; - _queue.CompleteAdding(); - Thread.Yield(); - _queue.Dispose(); - foreach (var thread in _threads) + try { - try + _queue.CompleteAdding(); + _queue.Dispose(); + foreach (var thread in _threads) { - thread.Join(); - thread.Abort(); + try + { + thread.Abort(); + } + catch { } + } + foreach (var thread in _threads) + { + try + { + thread.Join(); + } + catch { } } - catch { } } + catch { } } } } From 10934e3ca1b79450dd9d8c9a993dbab3002cf5eb Mon Sep 17 00:00:00 2001 From: Ogoun Date: Thu, 30 Jan 2020 17:19:37 +0300 Subject: [PATCH 2/3] Update Multiprocessor.cs --- ZeroLevel/Services/Utils/Multiprocessor.cs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/ZeroLevel/Services/Utils/Multiprocessor.cs b/ZeroLevel/Services/Utils/Multiprocessor.cs index acd0142..600283c 100644 --- a/ZeroLevel/Services/Utils/Multiprocessor.cs +++ b/ZeroLevel/Services/Utils/Multiprocessor.cs @@ -80,15 +80,7 @@ namespace ZeroLevel.Utils { try { - thread.Abort(); - } - catch { } - } - foreach (var thread in _threads) - { - try - { - thread.Join(); + thread.Interrupt(); } catch { } } From 3955d96ea8c92279512a37ee31e7bbbaa6028bc3 Mon Sep 17 00:00:00 2001 From: Ogoun Date: Thu, 30 Jan 2020 21:29:32 +0300 Subject: [PATCH 3/3] Update Multiprocessor.cs --- ZeroLevel/Services/Utils/Multiprocessor.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/ZeroLevel/Services/Utils/Multiprocessor.cs b/ZeroLevel/Services/Utils/Multiprocessor.cs index 600283c..21c19e0 100644 --- a/ZeroLevel/Services/Utils/Multiprocessor.cs +++ b/ZeroLevel/Services/Utils/Multiprocessor.cs @@ -10,7 +10,7 @@ namespace ZeroLevel.Utils { private BlockingCollection _queue = new BlockingCollection(); private List _threads = new List(); - private bool _is_disposed = false; + private volatile bool _is_disposed = false; private int _tasks_in_progress = 0; public int Count => _queue.Count + _tasks_in_progress; @@ -30,7 +30,7 @@ namespace ZeroLevel.Utils Interlocked.Increment(ref _tasks_in_progress); try { - handler(item); + handler?.Invoke(item); } finally { @@ -76,14 +76,6 @@ namespace ZeroLevel.Utils { _queue.CompleteAdding(); _queue.Dispose(); - foreach (var thread in _threads) - { - try - { - thread.Interrupt(); - } - catch { } - } } catch { } }