J'utilise souvent le bloc "using" pour disposer les objets. Aujourd'hui, j'utilise HttpWebRequest pour publier des données, et je me sens confus entre deux méthodes.confus lors de l'utilisation de "using block" - C#
Méthode 1:
var request = (HttpWebRequest)WebRequest.Create("http://www...");
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(JsonConvert.SerializeObject(content));
}
Méthode 2:
var request = (HttpWebRequest)WebRequest.Create("http://www...");
using (var stream = request.GetRequestStream())
using (var writer = new StreamWriter(stream))
{
writer.Write(JsonConvert.SerializeObject(content));
}
Dans la méthode 2, tous les cours d'eau et streamwirter en blocs "à l'aide", donc elle le sera certainement en disposer. Mais dans la méthode 1, je ne suis pas sûr flux request.GetRequestStream() sera disposer. Quelqu'un peut-il m'expliquer? Merci beaucoup!
Ainsi, la méthode 1 est aussi sûre que la méthode 2? –
@MinhGiang: Oui, exactement. –
Etes-vous sûr de ça? Si Stream.CanWrite est faux pour une raison quelconque (quelque chose d'imprévisible se produit avec la requête), le constructeur StreamWriter lancera ArgumentException et le flux sous-jacent pourrait ne pas être éliminé. Cela ne veut pas dire qu'il est probable que cela se produise, mais que certaines pratiques (comme la méthode 1) vous obligent à réfléchir à des implémentations particulières (qui pourraient aussi changer à l'avenir, bien sûr) et que certaines pratiques ne le font pas. C'est la raison pour laquelle je choisirais toujours personnellement la méthode 2. –