我有一个带有单个控制器的web api core 2.1应用程序。此控制器采用一个没有属性的Post。我使用这篇文章作为启动某些功能的方法。当我收到Post时,我调用一个函数来生成多个任务,每个任务都有一个延迟,然后通过HttpClient发送一条消息。这基本上模仿了多个设备将数据发送到我的端点。我发现的是,原始帖子中的OperationId正在流向所有已发送的消息。此功能不是我想要的,因为从应用程序见解中查看时,所有已发送的消息都链接在一起,因为它们都使用相同的OperationId。我想要做的是在通过单个HttpClient发送的每条消息中使用一个唯一的OperationId。
以下是一些用于延迟发送消息的代码。未显示的“heartbeat”对象,只是添加相关的消息文本,然后对传入的HttpClient执行SendAsync。
通过原始帖子调用的“for”循环多次调用StartWork函数。
private async Task StartWork(IHeartbeat heartbeat, int heartbeatInterval, CancellationToken cancellation)
{
await Task.Delay(TimeSpan.FromSeconds(_rnd.Next(1, heartbeatInterval)), cancellation);
await DoWork(heartbeat, heartbeatInterval, cancellation);
}
private async Task DoWork(IHeartbeat heartbeat, int heartbeatInterval, CancellationToken cancellation)
{
if (!cancellation.IsCancellationRequested)
{
await InvokeHeartbeat(heartbeat, cancellation);
Task.Delay(TimeSpan.FromSeconds(heartbeatInterval), cancellation)
.ContinueWith(t => DoWork(heartbeat, heartbeatInterval, cancellation), cancellation);
}
}
private async Task InvokeHeartbeat(IHeartbeat heartbeat, CancellationToken cancellation)
{
if (!cancellation.IsCancellationRequested)
{
await heartbeat.Send(_client, _host, _stopwatch, _logger, cancellation);
}
}
有没有办法修改“InvokeHeartbeat”函数中发送的每条消息的OperationId?
为清楚起见,我正在讨论的OperationId可以使用以下内容查看:
Activity.Current.Id;
答案 0 :(得分:1)
您需要创建新活动,以便在拨打电话时获得不同的ID。
特别是"创建儿童活动"部分。