public string AddTask(int reportId) { using (var scope = _tracer.BuildSpan("Server.AddTask").StartActive(true)) { var traceId = scope.Span.GetBaggageItem(Common.Objects.Constants.TRACE_ID); if (string.IsNullOrEmpty(traceId)) { throw new ApplicationException("Not found 'traceId'"); } var token = $"{traceId}-{reportId}"; var ctx = new SpanContext(scope.Span.Context); if (!_rmq.TryAdd(token, ctx.SerializeObject())) { throw new ApplicationException("Failed to add 'task'"); } Task.Factory.StartNew(() => { if (!_rmq.TryGetValue(token, out var context)) { throw new ApplicationException("Not found 'parentSpanCtx'"); } var parentSpanCtx = context.DeserializeToObject <SpanContext>(); using (var inner = _tracer.BuildSpan("Server.TaskProcess").AsChildOf(parentSpanCtx).StartActive(true)) { var innerTraceId = inner.Span.GetBaggageItem(Common.Objects.Constants.TRACE_ID); if (string.IsNullOrEmpty(innerTraceId)) { throw new ApplicationException("Not found 'innerTraceId'"); } foreach (var id in Enumerable.Range(0, 5).Select(_ => Guid.NewGuid())) { AppServerUtility.MakeRequest((IExportService proxy) => proxy.GetInfo(id)); } foreach (var uid in Enumerable.Range(0, 5).Select(_ => Guid.NewGuid())) { AppServerUtility.MakeRequest((IImageService proxy) => proxy.GetImage(uid)); } using (_tracer.BuildSpan("Server.SomeLongActions").StartActive(true)) { Thread.Sleep(2500); } if (!_db.TryAdd(token, $"{token}.docx")) { throw new ApplicationException("Failed to add 'file'"); } } }); using (_tracer.BuildSpan("Server.SomeActions").StartActive(true)) { Thread.Sleep(500); } return(token); } }