다음 테스트 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
나는 확실한 아무것도 찾을 수없는 새로운 충분히이입니다.
요약 : HttpContext.Current
잠재적 null
으로 await
?