- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图发现 ExecutionContext实际上适用于 .NET Framework 4.0 及更高版本。文档说,在使用 Thread.Start 和大多数线程池操作时,托管原则、同步、区域设置和用户上下文都流向新线程。但我在实践中根本看不到这行得通。
这是一个简单的控制台应用程序,用于测试启动新线程时同步上下文和托管原则是否流动......
static void Main(string[] args)
{
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("One"), null);
Thread t1 = new Thread(new ThreadStart(ThreadRun));
t1.Start();
t1.Join();
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("Two"), null);
AsyncFlowControl aFC = ExecutionContext.SuppressFlow();
Thread t2 = new Thread(new ThreadStart(ThreadRun));
t2.Start();
t2.Join();
aFC.Undo();
Console.Read();
}
static void ThreadRun()
{
Console.WriteLine("ThreadRun Id={0} Context={1} Principle={2}",
Thread.CurrentThread.ManagedThreadId,
(SynchronizationContext.Current != null),
Thread.CurrentPrincipal.Identity.Name);
}
ThreadRun Id=11 Context=False Principle=One
ThreadRun Id=12 Context=False Principle=Two
最佳答案
这是非常具有误导性的文档。我无法回答你问题的更广泛的主旨,但我可以告诉你为什么 SynchronizationContext
不流动。
如果你看Thread.Start的来源,它最终归结为:
[SecuritySafeCritical]
private void Start(ref StackCrawlMark stackMark)
{
this.StartupSetApartmentStateInternal();
if (this.m_Delegate != null)
((ThreadHelper) this.m_Delegate.Target).SetExecutionContextHelper(ExecutionContext.Capture(ref stackMark, ExecutionContext.CaptureOptions.IgnoreSyncCtx));
this.StartInternal(CallContext.Principal, ref stackMark);
}
ExecutionContext.CaptureOptions.IgnoreSyncCtx
默认情况下。它还通过
CallContext.Principal
与 ExecutionContext.SuppressFlow() 无关。因此,这解释了为什么您会看到您所看到的内容,但不能解释何时可能有用或为什么文档完全错误!
关于.net - .NET ExecutionContext 如何实际工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815575/
我有一个 .Net Framework 控制台应用程序,可以在 Azure 中成功将其发布为 WebJob 并查看它的运行情况。当我尝试向函数添加 ExecutionContext 参数时,我收到上述
我有以下测试用例: test("test future") { import scala.concurrent.ExecutionContext.global import scala
ExecutionContext 可用于函数参数。 但是,它不能通过依赖注入(inject)供其他方法使用,包括 Functions 的构造函数,如下所示: public class Func
ExecutionContext 可用于函数参数。 但是,它不能通过依赖注入(inject)供其他方法使用,包括 Functions 的构造函数,如下所示: public class Func
有人知道 ExecutionContext.Capture() 和 ExecutionContext.Run(context, work, state) 是否很昂贵吗? 它是否会降低性能,因此建议谨慎
我想知道哪个ExecutionContext我应该在 scalatest % 2.2.6 上使用(以及为什么)运行我的 future 并模拟 future 。 class Foo { def f
我一直在开发一个中小型 Web 应用程序,大约有 10 个端点。它应该可以同时处理数百个并发请求。 由于我公司的政策,我必须为我的 Controller 使用 javax.ws.rs,所以每个 Con
我有以下代码: object KafkaApi { private implicit val main: ExecutionContextExecutor = ExecutionContext.g
考虑以下代码: private static async Task Main(string[] args) { await SetValueInAsyncMethod(); Print
在每个方法中传递 ExecutionContext 是否更符合 Scala 习惯,例如 class Foo { def bar(a: Int, b: Int)(implicit ec: Exe
我试图发现 ExecutionContext实际上适用于 .NET Framework 4.0 及更高版本。文档说,在使用 Thread.Start 和大多数线程池操作时,托管原则、同步、区域设置和用
假设我想知道给定 ExecutionContext 中有多少个线程. 所以我正在写一个这样的函数 def count(implicit ec: ExecutionContext): Int = {
我知道,当您通过调用 BeginInvoke() 或 ThreadPool.QueueUserWorkItem(...) 并行运行某些方法时,.NET 框架正在捕获包含代码访问安全信息和其他一些内容的
在 scala 中使用 future 时,默认行为是使用默认的 Implicits.global 执行上下文。看来这默认为每个处理器提供一个可用线程。在更传统的线程 Web 应用程序中,当 futur
我有一个 Spring 批处理作业,它使用如下 Web 参数执行: https://localhost:8443/batch/async/orz003A?id=123&name=test 我已将这些参
我希望将隐式 ExecutionContext 传递给部分实现的特征。 在代码示例中: import scala.concurrent.Future trait Processor[T,R] {
我正在使用 Scala 2.10 future 创建一个异步库。库的构造函数采用一系列实现特定特征的用户定义对象,然后库类上的方法将一些数据逐个发送到用户定义对象中。我希望用户提供ExecutionC
这是一个相当笼统的问题,但希望是一个合理的问题。什么时候ExecutionContext#reportFailure(Throwable)叫? Scala 标准库中似乎没有调用它。我想我也许应该在某些
当我制作 future ,或应用类似 onSuccess 的方法和 map ,我可以为它们指定 ExecutionContext 。 例如, val f = future { // code }
我有这两个错误: Error:(39, 20) Cannot find an implicit ExecutionContext. You might pass an (implicit ec: Ex
我是一名优秀的程序员,十分优秀!