diff --git a/src/Elasticsearch.Net/Diagnostics/Diagnostic.cs b/src/Elasticsearch.Net/Diagnostics/Diagnostic.cs index b8e4472e20b..57b11fef65a 100644 --- a/src/Elasticsearch.Net/Diagnostics/Diagnostic.cs +++ b/src/Elasticsearch.Net/Diagnostics/Diagnostic.cs @@ -5,10 +5,10 @@ using System; using System.Diagnostics; -namespace Elasticsearch.Net.Diagnostics +namespace Elasticsearch.Net.Diagnostics { /// - /// Internal subclass of that implements to + /// Diagnostic that creates, starts and stops that implements to /// make it easier to use. /// internal class Diagnostic : Diagnostic @@ -17,22 +17,23 @@ public Diagnostic(string operationName, DiagnosticSource source, TState state) : base(operationName, source, state) => EndState = state; } - - internal class Diagnostic : Activity + + internal class Diagnostic : IDisposable { public static Diagnostic Default { get; } = new(); private readonly DiagnosticSource _source; - private TStateEnd _endState; private readonly bool _default; - private bool _disposed; + private readonly Activity _activity; + private TStateEnd _endState; - private Diagnostic() : base("__NOOP__") => _default = true; + private Diagnostic() => _default = true; - public Diagnostic(string operationName, DiagnosticSource source, TState state) : base(operationName) + public Diagnostic(string operationName, DiagnosticSource source, TState state) { _source = source; - _source.StartActivity(SetStartTime(DateTime.UtcNow), state); + _activity = new Activity(operationName); + _source.StartActivity(_activity, state); } public TStateEnd EndState @@ -40,25 +41,16 @@ public TStateEnd EndState get => _endState; internal set { - //do not store state on default instance + //do not store state on default instance if (_default) return; - _endState = value; + _endState = value; } } - - protected override void Dispose(bool disposing) - { - if (_disposed) return; - if (disposing) - { - //_source can be null if Default instance - _source?.StopActivity(SetEndTime(DateTime.UtcNow), EndState); - } - - _disposed = true; - - base.Dispose(disposing); + public void Dispose() + { + _source?.StopActivity(_activity, EndState); + _activity?.Dispose(); } } }