diff --git a/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs b/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs index 77230f3649..132e66166f 100644 --- a/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs +++ b/Libraries/Opc.Ua.Server/NodeManager/SamplingGroup.cs @@ -101,6 +101,18 @@ protected virtual void Dispose(bool disposing) m_shutdownEvent.Set(); m_samplingRates.Clear(); } + + if (m_samplingTask != null) + { + try + { + m_samplingTask.Wait(); + } + catch (AggregateException) { /* Ignore exceptions on shutdown */ } + } + + Utils.SilentDispose(m_samplingTask); + Utils.SilentDispose(m_shutdownEvent); } } #endregion @@ -130,9 +142,7 @@ public void Shutdown() { m_shutdownEvent.Set(); m_items.Clear(); - Utils.SilentDispose(m_samplingTask); m_samplingTask = null; - Utils.SilentDispose(m_shutdownEvent); } } diff --git a/Libraries/Opc.Ua.Server/NodeManager/SamplingGroupManager.cs b/Libraries/Opc.Ua.Server/NodeManager/SamplingGroupManager.cs index 591ad22a19..ad6428c30f 100644 --- a/Libraries/Opc.Ua.Server/NodeManager/SamplingGroupManager.cs +++ b/Libraries/Opc.Ua.Server/NodeManager/SamplingGroupManager.cs @@ -506,7 +506,6 @@ public virtual void ApplyChanges() // remove unused groups. foreach (SamplingGroup samplingGroup in unusedGroups) { - samplingGroup.Shutdown(); m_samplingGroups.Remove(samplingGroup); } }