gpt4 book ai didi

c# - CallContext LogicalGet(Set)Data 在带有异步/等待的 NUnit 框架上不起作用?

转载 作者:行者123 更新时间:2023-11-30 16:14:49 24 4
gpt4 key购买 nike

根据 this awesome blog ,即使使用 async/await(只要使用 .NET 4.5 和不可变数据),我们也可以安全地从 CallContext 的 LogicalContext 设置/获取数据。

让我们看下面这个简单的程序:

...
CallContext.LogicalSetData("id", "123");
var id1 = CallContext.LogicalGetData("id");
await Task.Delay(100);
var id2 = CallContext.LogicalGetData("id");
...

当它在标准控制台程序中运行时,一切正常 - id1 和 id2 都包含值“123”。

但是,如果它在 NUnit 方法中运行,则 id2 包含 NULL,而 id1 的值为“123”。

在 NUnit 框架中有什么不工作的原因吗?

最佳答案

在 NUnit 的本地运行器(GUI 和控制台)下运行时,包含类似于您发布的代码片段的测试的行为是正确的,即 id1id2具有值“123”,您可以通过运行下面的测试并检查 GUI 和控制台中的输出来重现它。

[Test]
public async Task DoSomething()
{
CallContext.LogicalSetData("id", "123");
var id1 = CallContext.LogicalGetData("id");
Console.WriteLine("ID1: " + id1);
await Task.Delay(100);
var id2 = CallContext.LogicalGetData("id");
Console.WriteLine("ID2: " + id2);
}

当您使用 R# 运行测试时,这是造成这种错误行为的最可能原因。

值得注意的是,即使测试是async void,该行为在 GUI 和控制台下也是正确的。

关于c# - CallContext LogicalGet(Set)Data 在带有异步/等待的 NUnit 框架上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com