"当前"属性与ExecutionContext一起流动

Joe*_*ger 6 .net multithreading async-await

这是一个两部分问题:

  1. 有人可以提供ASP.NET/.NET属性的列表,这些属性通常是与ExecutionContext一起流动的线程本地吗?

    HttpContext.Current?Thread.CurrentContext?Thread.CurrentPrincipal中?Thread.CurrentCulture?

    我可以依靠什么属性来存活/持续异步/等待?

    还有什么?

  2. 有没有办法添加将使用ExecutionContext自动流动的特定于应用程序的上下文信息?就像是

    var ec = ExecutionContext.Capture();
    ec.CustomContext["MyCustomContext"] = ACustomContext;
    
    Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 13

最好的资源是Stephen Toub的ExecutionContext vs. SynchronizationContext.没有像您要查找的属性列表.

ASP.NET实际使用SynchronizationContextHttpContext.Current,并Thread.CurrentPrincipal相当奇怪.

您可以使用LogicalSetData/ 添加自己的上下文LogicalGetData.但是,您应该只存储不可变数据.我在我的博客上记录了这一点.

  • @OhadSchneider,*显式*我的意思是显式调用`ExecutionContext.Capture`和`ExecutionContext.Run`.*隐式*我的意思是让异步/等待基础设施流动它. (2认同)