我有以下测试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";
}
至此,我相信第二个异常是可以预期的,因为当await
完成时,第二个异常可能会在另一个线程上,在那里HttpContext.Current
,线程静态变量将不再解析为适当的值。现在,基于同步上下文,实际上它可能被迫在等待后返回到同一线程,但是我在测试中没有做任何花哨的事情。这只是的简单,幼稚的用法await
。
在另一个问题的评论中,我被告知HttpContext.Current
应该在等待后解决。关于这个问题,甚至还有另一条评论表明了这一点。那是真的吗?它应该解决吗?我认为没有,但是我想要一个权威的答案,因为async
和await
足够新,所以我找不到任何确定的答案。
TL; DR:HttpContext.Current
可能null
在await
?之后吗?