У меня есть следующий тестовый код 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
?