【发布时间】:2016-02-11 20:56:52
【问题描述】:
我正在使用 Logical CallContext 将信息流回一系列等待。有趣的是,在我的测试控制台应用程序中,一切正常。但是,当在 VS UnitTest 的上下文中运行我的单元测试时,调用上下文似乎不会流经等待。
在方法内部:SendRequestAsyncImpl 正在设置调用上下文,当我在方法返回的那一刻从断点查询逻辑调用上下文时,调用上下文设置得很好。
但是,在下面的行中等待返回后:
Message response = await SendRequestAsyncImpl(m, true).ConfigureAwait(false);
逻辑调用上下文为空。我想也许可以通过设置 ConfigureAwait(true) 而不是 false 来解决问题。但这并不能解决问题。
我尝试流向什么都没关系,甚至在 SendRequestAsyncImpl 中设置一个简单的值类型,例如:
System.Runtime.Remoting.Messaging.CallContext.LogicalSetData("flag", true);
等待后不可检索。
为什么这在我的控制台应用程序中有效?但不是来自我的单元测试?有什么不同? (我见过一些其他涉及 AppDomain 问题的堆栈溢出问题。但我什至无法在 await 中编组一个 bool。编组数据的能力似乎不是这里的问题。)
【问题讨论】:
-
您的单元测试项目的目标框架版本是什么?
-
好问题。它的目标是 .NET 4.5
-
如果你用
await Task.Delay(100);替换你的SUT,它会流动吗? -
我可以在 await 之前调用 LogicalSetData,在 await 之后,值仍然是设置的。只有在等待的方法内部调用 LogicalSetData 时,它才不会流动。这是你要问的问题吗?
-
逻辑调用上下文不会流出任何方法。它会流入到方法并跨越
await点,但不会流出流出。
标签: c# async-await remoting vs-unit-testing-framework