问题标签 [executioncontext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
260 浏览

.net - ExecutionContext 类与“上下文”有什么关系?

上下文在域内为有特殊需要的对象创建细分的“容器”(或者在没有特殊需要的对象的情况下,使用默认上下文)。

我无法理解 ExecutionContext 类与这些上下文的关系。

它们是如何相关的或不同的,等等?

0 投票
1 回答
4213 浏览

.net - .NET ExecutionContext 是如何实际工作的?

我试图发现ExecutionContext在 .NET Framework 4.0 及更高版本中的实际工作方式。文档说,当使用 Thread.Start 和大多数线程池操作时,托管原则、同步、语言环境和用户上下文都流向新线程。但我根本看不到这在实践中有效。

这是一个简单的控制台应用程序,用于测试启动新线程时同步上下文和托管原则是否流动......

结果是……

所以同步上下文永远不会流动,托管原则总是流动,即使你指定它不应该流动。基本上文档是完全错误的。那么是否有关于 ExecutionContext 在现实中的作用以及它为什么有用的描述?

0 投票
1 回答
351 浏览

.net - 在 TPL 中,如何覆盖执行上下文?

创建新任务对象时如何覆盖执行上下文?我想使用我之前使用 ExecutionContext.Capture 捕获的一个。

0 投票
2 回答
1726 浏览

javascript - JavaScript 范围和执行上下文

我正在尝试了解 JavaScript 范围规则。我在教科书和文档中读到的内容令人困惑。

在我看来,JavaScript 是一种静态(或词法)范围的语言 - 当试图将变量名绑定到变量(定义)时,会使用代码的词法结构。

执行上下文似乎类似于调用堆栈上的堆栈帧。每个执行上下文都有一个变量对象,所有局部变量(相关函数的)都在该变量对象上定义。这些变量对象链接在一起以提供从堆栈顶部的变量对象到堆栈底部的变量对象(窗口对象)的“范围链”。在将变量名称绑定到变量时,从上到下搜索此范围链。这与 C/C++/Java 等静态范围语言非常相似。

与 C/C++/Java 相比,似乎有一个重要的区别——可以访问在堆栈帧不再位于调用堆栈上的函数中定义的变量,如下例所示:

我做对了吗?还有其他我应该注意的问题吗?

提前致谢

0 投票
2 回答
6739 浏览

c# - 使用 ASP.NET Web API,我的 ExecutionContext 没有在异步操作中流动

我很难理解 ExecutionContext 背后的机制。

从我在网上阅读的内容来看,上下文相关的项目,如安全性(线程主体)、文化等,应该在工作执行单元的范围内跨异步线程流动。

不过,我遇到了非常令人困惑且具有潜在危险的错误。我注意到我的线程的 CurrentPrincipal 在异步执行过程中丢失了。


下面是一个示例 ASP.NET Web API 场景:

首先,让我们设置一个简单的 Web API 配置,其中包含两个用于测试的委托处理程序。

他们所做的只是写出调试信息并传递请求/响应,除了第一个“DummyHandler”设置线程的主体以及要在上下文中共享的一段数据(请求的相关 ID)。


很简单。接下来让我们添加一个 ApiController 来处理 HTTP POST,就像您在上传文件一样。


在使用 Fiddler 运行测试时,这是我收到的输出:


为了使事情更加混乱,当我将以下内容附加到异步行时:

我现在收到这个输出:

这里的重点是。异步之后的代码实际上调用了我的业务逻辑,或者只是要求正确设置安全上下文。存在潜在的完整性问题。

任何人都可以帮助阐明正在发生的事情吗?

提前致谢。

0 投票
1 回答
11204 浏览

scala - 将隐式 ExecutionContext 传递给包含的对象/调用的方法

我正在使用 Scala 2.10 期货创建一个异步库。库的构造函数采用一系列实现特定特征的用户定义对象,然后库类上的方法将一些数据一个接一个地发送到用户定义对象中。我希望用户ExecutionContext在设置主实例时提供异步操作,然后根据需要将该上下文传递给用户定义的对象。简化(伪?)代码:

它可能会像这样使用:

我收到以下编译错误ThingProcessor

找不到隐式 ExecutionContext,要么自己需要,要么导入ExecutionContext.Implicits.global

我的问题是,我如何隐式地ExecutionContextLibraryObject用户定义的对象(ThingProcessorand PassThroughProcessor)或其方法提供必须的内容,而不会让用户(将编写类)担心它——也就是说,我更喜欢用户不必键入:

或者

0 投票
2 回答
1610 浏览

sql-server - 如何获取调用存储过程的数据库名称?

请参阅代码中的注释。

输出

0 投票
1 回答
1174 浏览

c# - 需要一个执行上下文来组合异步和 TPL 代码

我正在寻找一个执行上下文,它可以async/await通过以下方式同时与 TPL 很好地配合使用(预期行为):

(1) 玩得很好async/await

(2) 玩得很好Task.Run()

(3) 与期待已久的人打得很好Task

(3)不是必需的,但会很好。我CallContext现在使用,但它在(2)处失败,因为即使在手动运行的任务中也可以访问存储在其中的值,即使在那些运行时使用Task.Factory.StartNew(..., LongRunning)它应该强制在单独的线程上运行任务。

有没有办法做到这一点?

0 投票
2 回答
1602 浏览

scala - Scala:将执行上下文传递给 Future 的 map 函数的语法

这个问题的前一个版本没有说到点子上,所以我试着把它归结为:

Future的map函数接受一个 ExecutionContext,如下所示(取自API 2.10.3

我想传递我自己的 ExecutionContext,但我没有成功。好像我的语法不正确。

如何将我的 ExecutionContext 传递给 Future 的映射函数?

我得到的是:

0 投票
1 回答
2519 浏览

async-await - 安全性、Thread.CurrentPrincipal 和 ConfigureAwait(false)

在使用 ConfigureAwait(false) 的引用库中使用 Thread.CurrentPrincipal 的声明会造成任何问题,还是 ExecutionContext 的逻辑调用上下文的流动会在那里照顾我?(到目前为止,我的阅读和测试表明它会)。

示例 WebAPI 控制器操作:

来自外部引用库的示例加载函数:

此外,答案不能是“那么不要使用 ConfigureAwait(false)!”。这可能会导致其他问题,例如死锁(不要阻塞异步代码)。