我有以下测试 WebAPI 代码,我没有在生产中使用 WebAPI,但我这样做是因为我对这个问题进行了讨论:WebAPI Async question
无论如何,这是有问题的 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";
}
我一直认为第二个异常是预期的,因为当await
完成时,它可能在另一个线程上,HttpContext.Current
因为线程静态变量将不再解析为适当的值。现在,基于同步上下文,它实际上可能会在等待之后被迫回到同一个线程,但我在测试中没有做任何花哨的事情。这只是对await
.
在另一个问题的评论中,我被告知HttpContext.Current
应该在等待后解决。甚至还有关于这个问题的另一条评论也表明了这一点。那么什么是真的?它应该解决吗?我认为没有,但我想要一个权威的答案,因为async
它await
足够新,我找不到任何确定的东西。
TL;DR:HttpContext.Current
可能是null
在await
?