首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用异步任务的逻辑CallContext值

不使用异步任务的逻辑CallContext值
EN

Stack Overflow用户
提问于 2014-10-03 17:54:34
回答 1查看 2.3K关注 0票数 6

基于我所读过的所有内容,下面的测试方法应该通过。我想弄明白为什么失败了。私有异步方法中的第一个断言按预期传递。但是,一旦任务被返回并等待。在检索时,CallContext中设置的值现在为null。

代码语言:javascript
复制
    [TestMethod]
    public void LogicalCallContextBlockingTest()
    {
        PerformSimpleAsyncWork().Wait();

        var result = CallContext.LogicalGetData("test");

        Assert.AreEqual(result, "expected");
    }       

    private async Task PerformSimpleAsyncWork()
    {
        await Task.Run(() =>
            {
                System.Threading.Thread.Sleep(100);
                CallContext.LogicalSetData("test", "expected");

                var result = CallContext.LogicalGetData("test");

                Assert.AreEqual(result, "expected");

            });   
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 18:00:10

使用async关键字修饰的方法在调用时创建子上下文。对此子上下文所做的任何更改都不会传播到父上下文。

因此,PerformSimpleAsyncWork获得一个子上下文,该子上下文可以看到调用方在上下文中放置的任何内容,但是调用方(LogicalCallContextBlockingTest)将无法使用它所做的任何更改。

如果您需要更多的信息,Stephen有一个关于这种行为的good writeup

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26184161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档