У меня есть класс, который пытается получить информацию из веб-службы несколько раз:
public TResult Try(Func<TResult> func, int maxRetries)
{
TResult returnValue = default(TResult);
int numTries = 0;
bool succeeded = false;
while (numTries < maxRetries)
{
try
{
returnValue = func();
succeeded = true;
}
catch (Exception ex)
{
Log(ex,numTries);
}
finally
{
numTries++;
}
if (succeeded)
{
return returnValue;
}
else
{
if (numTries == maxRetries)
{
//ask user what to do
}
}
}
Теперь после 'if (numTries == maxRetries)' пользователь сможет выбрать, будет ли он продолжать попыткиполучить данные из веб-сервиса или отменить.Я хочу просто открыть новую форму, когда пользователь отменяет и прекращает выполнение метода, который вызвал метод выше.Я не могу просто вернуть нулевой или новый объект, потому что метод, который запускает этот ретривер, продолжит работать и во многих случаях вызывает проблемы.
Так что в основном это выглядит так:Я, конечно, мог бы проверить, было ли возвращенное значение нулевым, например:
someValue = retry.Try(()=>webService.method(),maxRetries));
if (someValue == null)
return;
Но это означало бы множество изменений в коде, и я хочу избежать этого, и было бы лучше, если бы я мог сделать это из Tryспособ.