public ETWSession(TraceEventSession session) { this.session = session; this.backgroundProcessesCts = new CancellationTokenSource(); this.syncObject = new object(); state = ETWSessionState.NotStarted; processingTask = null; }
public void StartProcessing() { lock (syncObject) { if (state == ETWSessionState.NotStarted) { #pragma warning disable 4014 StartTimeSynchronizer(backgroundProcessesCts.Token); #pragma warning restore 4014 processingTask = Task.Factory.StartNew(StartProcessingInternal, TaskCreationOptions.LongRunning); state = ETWSessionState.Started; } } }
public void Dispose() { lock (syncObject) { if (state == ETWSessionState.Started) { backgroundProcessesCts.Cancel(); } session.Dispose(); try { processingTask.Wait(1000); } catch { } state = ETWSessionState.Disposed; } }