- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下测试
[Test]
public void aaa()
{
CallContext.LogicalSetData("aa", "1");
Action parallelMethod = () => CallContext.LogicalSetData("aa", "2");
var r = parallelMethod.BeginInvoke(null, null);
parallelMethod.EndInvoke(r);
Assert.That(CallContext.LogicalGetData("aa"), Is.EqualTo("1"));
}
最佳答案
您的示例所说明的行为确实是设计使然。 LogicalCallContext 能够通过异步调用或 .net 远程调用双向流动。正如您所观察到的,当您调用 EndInvoke 时,子上下文的 LogicalCallContext 会合并回父上下文。这是有意的,以便远程方法的调用者可以访问远程方法设置的任何值。如果您愿意,您可以使用此功能将数据从 child 传回。
在 .NET Framework 源代码步进的帮助下进行调试,对此效果有明确的注释:
在 System.Runtime.Remoting.Proxies.RemotingProxy.Invoke 中:
case Message.EndAsync:
// This will also merge back the call context
// onto the thread that called EndAsync
RealProxy.EndInvokeHelper(m, false);
// Merge the call context back into the thread that
// called EndInvoke
CallContext.GetLogicalCallContext().Merge(
mrm.LogicalCallContext);
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Thread.SetData(Thread.GetNamedDataSlot("foo"), "blah!!");
}
private void button1_Click(object sender, EventArgs e)
{
var val = (string)Thread.GetData(Thread.GetNamedDataSlot("foo"));
MessageBox.Show(val ?? "no value");
}
关于.net - EndInvoke 更改当前 CallContext - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/883486/
在网页上,我调用不允许我以编程方式设置超时的第三方。我调用 BeginInvoke 并使用 AsyncWaitHandle.WaitOne 等待指定的时间量。 如果调用超时,我会继续并忘记我开始的线程
一个异步问题: 我在互联网上阅读了大量支持和反对 Delegate.EndInvoke() 可选的文章。这些文章大多数都是 4-5 年前的文章。很多死链接。 任何人都可以解释一下,在 .NET 2.0
我有一个正常的方法 public List FindNearByCity(string targetCity) { // ... some implementation } 我想为这个方法添加异步支持
我不会做很多 Windows GUI 编程,所以对于比我更熟悉 WinForms 的人来说,这可能都是常识。不幸的是,我今天在调试期间遇到了任何资源来解释这个问题。 如果我们在异步委托(delegat
我读过几个论坛,甚至一两个stackoverflow问题都说在使用Delegate.BeginInvoke时Delegate.EndInvoke是必要的。我读过的许多谈论使用 BeginInvoke
所以 C#/.NET 问题。在使用 .BeginInvoke 异步调用某些方法时,是否总是需要调用 .EndInvoke?我在某处读到它是强制性的,但问题是 .EndInvoke 会阻止执行吗?有某种
我有一个显示实时值的客户端应用程序。这些值通过 DDE-Advise 提供。这些实时值是数控机床的移动轴。因此,通过此 DdeClientAdvise-Method,每分钟大约有 100 个建议。 当
在 BeginInvoke 之后的回调中,AsyncResult.AsyncDelegate 需要转换为正确的类型,然后才能访问 EndInvoke。 但是我正在使用泛型,那么我是否需要为 N 个泛化
以这种方式为 MainForm 线程调用委托(delegate)是一种好习惯吗?: Txt.MainForm.EndInvoke( Txt.MainForm.BeginInvoke( new
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicates: Must every BeginInvoke be followed by an EndInvoke? I
关于是否每个 BeginInvoke() 都必须与 EndInvoke() 匹配,我读过相互矛盾的意见。是否存在与不调用 EndInvoke() 相关的任何泄漏或其他问题? 最佳答案 Delegate
我有以下测试 [Test] public void aaa() { CallContext.LogicalSetData("aa", "1"); Action parallelMeth
我正在通过 ASP.net 自下而上地工作,并且我正在设置一个老式的委托(delegate)模式: public delegate void ProcessRequestDelegate(Ht
我正在通过 ASP.net 自下而上地工作,并且我正在设置一个老式的委托(delegate)模式: public delegate void ProcessRequestDelegate(Ht
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why does asynchronous delegate method require calling
试图围绕 Tasks 类,更具体地说,Task.Factory.FromAsync 方法。 目前在我的代码中我正在做这样的事情: var handler = MyEvent; if (handler
我的 .aspx 文件中的这个方法... private static string GetPageAsString(string address) {
以下类为例。 public class A { // ... void Foo(S myStruct){...} } public class B { public A test;
为什么委托(delegate)需要在方法触发之前调用 EndInvoke?如果我需要调用 EndInvoke(它会阻塞线程)那么它不是真正的异步调用吗? 这是我要运行的代码。 class Progra
我想知道 BeginInvoke/EndInvoke 方法是如何在委托(delegate)上实现的。我知道它们是由编译器自动生成的,有点特殊,所以反汇编程序无法处理它们。但最终是代码被执行了,对吧?出
我是一名优秀的程序员,十分优秀!