小编wel*_*gan的帖子

为什么HttpContext.Current在等待之后为null?

我有以下测试WebAPI代码,我没有在生产中使用WebAPI但我之所以这样做是因为我对这个问题进行了讨论:WebAPI异步问题

无论如何,这是违规的WebAPI方法:

public async Task<string> Get(int id)
{
    var x = HttpContext.Current;
    if (x == null)
    {
        // not thrown
        throw new ArgumentException("HttpContext.Current is null");
    }

    await Task.Run(() => { Task.Delay(500); id = 3; });

    x = HttpContext.Current;
    if (x == null)
    {
        // thrown
        throw new ArgumentException("HttpContext.Current is null");
    }

    return "value";
}
Run Code Online (Sandbox Code Playgroud)

我曾经相信第二个异常是预期的,因为当await完成时,它可能会在一个不同的线程上,HttpContext.Current因为线程静态变量将不再解析为适当的值.现在,基于同步上下文,实际上它可能会在等待之后被强制返回到同一个线程但我在测试中没有做任何奇特的事情.这只是一个简单,天真的用法await.

在另一个问题的评论中,我被告知HttpContext.Current在等待之后应该解决.对这个问题甚至还有另一个评论,表明同样的问题.什么是真的?应该解决吗?我想不,但我想要一个权威的答案,因为asyncawait是新的,我找不到任何确定的东西.

TL; DR:HttpContext.Current可能null在一个await

c# asp.net async-await asp.net-web-api

82
推荐指数
3
解决办法
4万
查看次数

标签 统计

asp.net ×1

asp.net-web-api ×1

async-await ×1

c# ×1