J'utilise un service Web xml sur mon application Web et le serveur distant ne parvient pas à répondre à temps. Je suis venu avec l'idée de re-demander si la première tentative échoue. Pour éviter la boucle je veux limiter la demande simultanée à 2. Je veux avoir une opinion si ce que j'ai fait ci-dessous est correct et fonctionnerait comme je l'attendais.Réessayer la requête si la première a échoué
public class ScEngine
{
private int _attemptcount = 0;
public int attemptcount
{
get
{
return _attemptcount;
}
set
{
_attemptcount = value;
}
}
public DataSet GetStat(string q, string job)
{
try
{
//snip....
attemptcount += attemptcount;
return ds;
}
catch
{
if (attemptcount>=2)
{
return null;
}
else
{
return GetStat(q, job);
}
}
}
}
Soyez très, très prudent avec cette approche; il ne "niche" pas bien. Supposons que vous ayez une méthode de bas niveau qui réessaie une opération cinq fois avant d'abandonner. Son appelant réessaie cinq fois avant d'abandonner. Et son appelant réessaye cinq fois avant d'abandonner. Soudain, vous réessayez 125 avant d'abandonner. Nous avons eu des situations dans le monde réel où le code qui aurait dû renvoyer un code d'erreur en moins d'une seconde est resté en place dans des tentatives profondément imbriquées pendant plus d'une semaine, semblant bloquer l'application. Il est généralement préférable d'échouer rapidement et laisser l'utilisateur décider quand réessayer. –