gpt4 book ai didi

multithreading - 跨异步边界关联调用?

转载 作者:行者123 更新时间:2023-12-03 12:54:05 27 4
gpt4 key购买 nike

我需要关联跨异步方法进行的监视工具的调用(主要是每个高级请求的时间信息)。

例如 - 对于 Web 服务器请求,我想知道在 MethodA、MethodC 和 MethodH 中分别花费了多少时间,其中一些可能在它们之间的调用层次结构中。

如果不涉及异步方法(假设是单线程应用程序),ThreadLocal<T>具有请求生命周期的基本上可以工作,但鉴于异步调用可能被任何线程发送,这不是一个选项。

在完整的框架上,我可以使用 HttpContext ,但这在 .NET 核心中不可用。

除了将上下文参数传递给每个受监控的方法(无论是手动还是通过某种 AOP),还有哪些选项?

最佳答案

这似乎是 AsyncLocal是最合适的解决方案。 AsyncLocal 是针对此类场景添加的 ExecutionContext 的抽象。对它的更新会影响跨异步边界的子异步调用,并且父的任何部分都从此方法恢复到,但不会影响在更新之前开始且仍在进行中的任何异步调用。

这用于 OpenTracing对于这个确切的用例。您在进入请求处理程序时设置 AsyncLocal,然后在退出时将其清除:

class Example
{
static AsyncLocal<string> requestId = new AsyncLocal<string>();

static async Task Handler()
{
requestId.Value = GetRequestId();
await DoWork();
requestId.Value = null;
}
}

关于multithreading - 跨异步边界关联调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57755504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com