C#ASP.NET,在异步调用堆栈中设置Thread.CurrentPrincipal?

时间:2019-06-05 15:40:08

标签: c# asp.net async-await

我知道,在使用异步/等待时,如果我们离开ASP.NET同步上下文并返回到它,ASP.NET将设置Thread.CurrentPrincipal = HttpContext.Current.User。但是,当我们进入异步调用链时会发生什么呢?我相信各种情况都是一种方式。 HTTPContext除了对于用户而言是静态的。

  1. 呼叫链的下一个延续会发生什么?
    1. 调用堆栈的下一个延续是否将使用捕获的Thread.CurrentPrincipal和等待时的上下文?
    2. 或者ASP.NET还会在每个延续中设置Thread.CurrentPrincipal = HttpContext.Current.User吗?
    3. 还是堆栈的延续会以默认的主体结束?
  2. 如果要手动设置Thread.CurrentPrincipal,在调用堆栈中会看到吗?
    1. 如果继续在同一线程上?
    2. 如果延续是在另一个ASP.NET ThreadPool线程上进行的?
    3. 如果要手动设置Thread.CurrentPrincipal,是否必须在每个连续中设置Thread.CurrentPrincipal

我正在使用.Net 4.6.1开发现有的ASP.NET项目。在调用堆栈中,第3方组件离开了ASP.NET上下文。当第三方返回时,我需要HttpContext.Current.User中的值并将其设置为Thread.CurrentPrincipal,以便ASP.NET上下文在返回时将其重置。在异步链的开始,我恢复了.ConfigureAwait(false)和HttpContext.Current.User。但是我想将其进一步下移。我没有使用foo

0 个答案:

没有答案