- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
while (true)
{
try
{
ProductService.Invoke(method);
return;
}
catch(Exception ex)
{
if (ex is System.ServiceModel.CommunicationException)
{
if (currentRetryCount == RetryCount)
throw new CommunicationException(CommunicationFailureMessage, ex);
System.Threading.Thread.Sleep(RetryWait);
currentRetryCount++;
}
}
}
3.14159265 03.08.2012 18:12 # +3
Зациклить может, если регулярно не тот эксепшон лезет. Но неизвестно что там вообще может вылезать.
guest 03.08.2012 19:12 # +2
abatishchev 03.08.2012 19:22 # −1
а главное - почти самый гавёный анти-паттерн из анти-паттернов
Dummy00001 04.08.2012 00:18 # 0
напомнило другое говно: у народа в проге соединение с базой рвалось постоянно, потому что фаервол говёный стоял у клиента в сети. клиент дурак настоял (и за это заплатил) что бы в коде сделали простой реконнект к базе. наши дураки (клиент (с деньгами) всегда прав!) это сделали. более или менее в первый же день у клиента случилось логичное: разрыв соединения в середине транзакции. и цирк начался...
wvxvw 04.08.2012 12:44 # +5
Dummy00001 04.08.2012 13:17 # 0
abatishchev 05.08.2012 12:52 # +1
absolut 06.08.2012 10:02 # +4
и его наследников
3.14159265 06.08.2012 13:18 # +1
Вы смотрите на проблему не под тем углом.
>бесконечный цикл
Вот это конечно хуёво, но это может запускаться в треде с таймаутом.
Я лично такой код видел (наверняка оно до сих пор так и работает).
Но там было одно небольшое, но существенное отличие: по ThreadInterruptedException вываливаливался дальше.
Но! Данный код также может выйти из цикла если прерывание произойдет во время System.Threading.Thread.Sleep(RetryWait) , например.
Lure Of Chaos 04.08.2012 10:49 # +2