J'ai utilisé ce modèle lorsque j'ai besoin de contrôler combien de temps prennent différentes opérations asynchrones. Je ne veux pas dire spécifiquement pour WebRequest (je sais que vous pouvez définir la propriété timeout), je l'ai juste utilisé comme exemple pour le pattern.À quel point ce patron est-il mauvais?
var request = WebRequest.Create(someUri);
WebResponse response = null;
request.BeginGetResponse(result =>
{
var asyncRequest = (WebRequest)result.AsyncState;
response = asyncRequest.EndGetResponse(result);
}, request);
DateTime timeout = DateTime.Now.AddSeconds(10);
while (response == null && DateTime.Now <= timeout)
{
Thread.Sleep(0);
}
if (response == null) throw new Exception("Timeout!");
Partout j'ai lu sur Thread.Sleep(), je l'ai entendu est une chose baaaad à faire, mais je ne pense pas vraiment ce abus de cas l'utiliser.
Je sais qu'il est possible que ce soit un peu plus de exactement 10 secondes, mais ce n'est pas important pour moi.
Donc, est-ce vraiment un mauvais moyen d'accomplir ce que j'accomplis, et si oui, quelle est la meilleure façon de le faire?
EDIT: Peut-être que je devrais clarifier ce que je "essaie d'accomplir
Le but est de contrôler la quantité maximum de temps d'attente sur un appel que je suis conscient que cela va à l'encontre du but d'un async.. . appeler, mais l'intention n'a jamais été d'être asynchrone, je suis juste l'utiliser comme un moyen de contrôler
Aha! Cela semble tellement évident! –