diff --git a/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs b/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs index fddabbf38c..5afb8ececf 100644 --- a/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs +++ b/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs @@ -106,7 +106,7 @@ namespace Opc.Ua.Server { m_shutdownEvent.Reset(); - Task.Factory.StartNew(() => { + m_samplingTask = Task.Factory.StartNew(() => { SampleMonitoredItems(m_samplingInterval); }, TaskCreationOptions.LongRunning | TaskCreationOptions.DenyChildAttach); } @@ -121,6 +121,9 @@ namespace Opc.Ua.Server { m_shutdownEvent.Set(); m_items.Clear(); + Utils.SilentDispose(m_samplingTask); + m_samplingTask = null; + Utils.SilentDispose(m_shutdownEvent); } } @@ -243,7 +246,7 @@ namespace Opc.Ua.Server m_itemsToRemove.Clear(); // start the group if it is not running. - if (m_items.Count > 0) + if (m_samplingTask == null && m_items.Count > 0) { Startup(); } @@ -487,6 +490,7 @@ namespace Opc.Ua.Server private Dictionary m_items; private ManualResetEvent m_shutdownEvent; private List m_samplingRates; + private Task m_samplingTask; #endregion } }