internal AgentWriter(IApi api, IMetrics metrics, IKeepRateCalculator traceKeepRateCalculator, bool automaticFlush, int maxBufferSize, int batchInterval) { _api = api; _metrics = metrics; _batchInterval = batchInterval; _traceKeepRateCalculator = traceKeepRateCalculator; var formatterResolver = SpanFormatterResolver.Instance; _forceFlush = new TaskCompletionSource <bool>(TaskOptions); _frontBuffer = new SpanBuffer(maxBufferSize, formatterResolver); _backBuffer = new SpanBuffer(maxBufferSize, formatterResolver); _activeBuffer = _frontBuffer; _serializationTask = automaticFlush ? Task.Factory.StartNew(SerializeTracesLoop, TaskCreationOptions.LongRunning) : Task.FromResult(true); _serializationTask.ContinueWith(t => Log.Error(t.Exception, "Error in serialization task"), TaskContinuationOptions.OnlyOnFaulted); _flushTask = automaticFlush ? Task.Run(FlushBuffersTaskLoopAsync) : Task.FromResult(true); _flushTask.ContinueWith(t => Log.Error(t.Exception, "Error in flush task"), TaskContinuationOptions.OnlyOnFaulted); }