Aşağıdaki test WebAPI koduna sahibim, üretimde WebAPI kullanmıyorum ancak bunu bu soru üzerine yaptığım bir tartışma nedeniyle yaptım: WebAPI Async sorusu
Her neyse, sorun teşkil eden WebAPI yöntemi şöyledir:
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";
}
Burada ikinci istisnanın beklendiğine inanmıştım çünkü await tamamlandığında, muhtemelen farklı bir iş parçacığı üzerinde olacak,HttpContext.Current bir iş parçacığı statik değişkeni artık uygun değere çözümlenmeyecek. Şimdi, senkronizasyon bağlamına bağlı olarak, beklemeden sonra aynı iş parçacığına geri dönmek zorunda kalabilir, ancak testimde süslü bir şey yapmıyorum. Bu sadece basit, saf bir kullanım await.
Başka bir sorudaki yorumlarda, HttpContext.Currentbir beklemeden sonra çözülmesi gerektiği söylendi . Bu soru hakkında aynı şeyi belirten başka bir yorum daha var. Peki doğru olan ne? Çözülmeli mi? Hiçbir düşünüyorum, ama bunun nedeni bir yetkili cevap istiyorum asyncve awaitben kesin bir şey bulamıyorum bu yeni yeterlidir.
TL; DR: HttpContext.CurrentPotansiyel olarak nullbir await?


