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();
}
}
}