- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是一个非常简单的例子,我希望它能工作但是......
static AsyncLocal<bool> _value = new AsyncLocal<bool>();
static void Main(string[] args)
{
A().Wait();
}
static async Task A()
{
await B();
await C();
}
static async Task B()
{
_value.Value = true;
}
static async Task C()
{
if (!_value.Value) throw new Exception();
}
那么是否有可能以某种方式在方法 B
中存储一些内容,以便在 C
中提供一个值?我需要它仅通过异步流传递(请不要使用 ThreadStatic
)。
最佳答案
这就是我的发现:
AsyncLocal
仅以一种方式传输 - 从外层到内层异步方法,因此我添加了一个 B_Start
方法,该方法在“顶层”级别初始化本地.工作代码:
class Container<T>
{
public T Value { get; set; }
}
static AsyncLocal<Container<bool>> _value = new AsyncLocal<Container<bool>>();
static void Main(string[] args)
{
A().Wait();
}
static async Task A()
{
await B_Start();
await C();
}
static Task B_Start()
{
_value.Value = new Container<bool>();
return B();
}
static async Task B()
{
_value.Value.Value = true;
}
static async Task C()
{
if (!_value.Value.Value) throw new Exception();
}
关于c# - 如何让AsyncLocal流向 sibling ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37306203/
在最近的 PR 评论中提出了一个问题,即是否 AsyncLocal>应该使用 ConcurrentDictionary<> .我的想法是它不需要,因为多个线程不会同时访问 AsyncLocal 值。但
.NET 4.6 引入了 AsyncLocal用于沿着异步控制流流动环境数据的类。我以前用过 CallContext.LogicalGet/SetData为此目的,我想知道这两者在语义上是否以及以何种
为什么从类的异步方法设置时不保留 AsyncLocal 字段的值。考虑这个例子: var scope = new TestScope(); // The default value is 0 Cons
DotNet Fiddle 链接 https://dotnetfiddle.net/GqA32R 我有以下示例代码来演示异步本地功能 static AsyncLocal _asyncLocalStri
我正在努力寻找 AsyncLocal 功能的简单文档。 我写了一些我认为告诉我答案是"is"的测试,但如果有人能证实这一点就太好了! (特别是因为我不知道如何编写可以明确控制线程和延续上下文的测试..
当我调用WrapperAsync时,AsyncLocalContext.Value返回null。当我在方法外部运行相同的代码块时,在 Main 方法中,AsyncLocalContext.Value
考虑这个例子: class Program { private static readonly ITargetBlock Mesh = CreateMesh(); private st
我正在处理一个非常大且旧的桌面 winform 应用程序代码库。在此代码库中,有很多操作在后台线程中执行,主要使用 BackgroundWorker。 . 此代码库中的一个常见模式是通过将工件绑定(b
在 ASP.NET Core 中,我使用的是 IHttpContextAccessor访问当前 HttpContext . HttpContextAccessor uses AsyncLocal .
我查看了如何在 .NET Core 中创建 HttpContext。然后我发现有一个类叫HttpContextFactory创建和分配 HttpContext对象变成 HttpContext Http
我读到了AsyncLocal来自 the MSDN documentation ,但有一点我还不清楚。 我正在研究诸如上下文绑定(bind)缓存/内存之类的东西,其目的很简单,就是在逻辑请求中存储数据
我正在使用 Azure 函数,需要将 HttpRequestMessage 传递到所调用的整个异步/等待函数链。在这种情况下我可以使用 AsyncLocal 吗? 共享代码: public class
我正在尝试了解 AsyncLocal 在 .Net 4.6 中的工作方式。我正在将一些数据放入 AsyncLocal...但是当 ThreadContext 更改时它被设置为 null。我使用 Asy
我不太了解这种情况,其中 AsyncLocal instance设置在 AuthenticationHandler 中的某个点,但没有到达 Controller ,当它被注入(inject) cons
对于 .NET 核心, AsyncLocal 是 CallContext 的替代品.但是,尚不清楚在 ASP.NET Core 中使用它有多“安全”。 在 ASP.NET 4 (MVC 5) 和更早版
在以下示例中,我将值设置为 AsyncLocal我的变量HttpApplication Application_BeginRequest() 中的子类(即 Global.asax) : public
在 Controller 作用域中解析的元素上调用 Dispose 之前,执行上下文似乎不会保留。这可能是由于 asp.net core 必须在 native 代码和托管代码之间跳转,并在每次跳转时重
TL;DR ThreadLocal.Value 指向相同的位置,如果 Thread.CurrentThread 保持不变。 AsyncLocal.Value 是否有类似的东西(例如,Sychroniz
查找演示此问题的完整示例应用程序 here . 我正在尝试使用 OWIN 中间件填充 WebForms 页面可访问的静态标识符,但我注意到对于某些类型,这并不直观 - 特别是 AsyncLocal .
我不得不用 AsyncLocal 替换代码中 ThreadLocal 的使用,以便在等待异步操作时保持“环境状态”。 但是,AsyncLocal 的一个令人讨厌的行为是它“流”到子线程。这与 Thre
我是一名优秀的程序员,十分优秀!