J'ai le code de test WebAPI suivant, je n'utilise pas WebAPI en production mais j'ai fait cela à cause d'une discussion que j'ai eue sur cette question: Question WebAPI Async
Quoi qu'il en soit, voici la méthode WebAPI incriminée:
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";
}
J'avais ici cru que la deuxième exception est attendue parce que lorsque le sera await
terminé, ce sera probablement sur un thread différent où, en HttpContext.Current
tant que variable de thread statique, ne sera plus résolu à la valeur appropriée. Maintenant, en fonction du contexte de synchronisation, il pourrait en fait être forcé de revenir au même thread après l'attente, mais je ne fais rien d'extraordinaire dans mon test. Ceci est juste une utilisation simple et naïve de await
.
Dans les commentaires d'une autre question, on m'a dit que cela HttpContext.Current
devrait être résolu après une attente. Il y a même un autre commentaire sur cette question indiquant la même chose. Alors qu'est-ce qui est vrai? Doit-il se résoudre? Je pense que non, mais je veux une réponse faisant autorité à ce sujet parce que async
et await
est suffisamment nouveau pour que je ne trouve rien de définitif.
TL; DR: Est-ce HttpContext.Current
potentiellement null
après un await
?