Stop de uitvoering van de methode

Ik heb een klasse die een paar keer probeert informatie van de webservice te krijgen:

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
            }
        }
  }

Nu na 'if (numTries == maxRetries)' kan de gebruiker kiezen of hij wil blijven proberen gegevens van de webservice te krijgen of te annuleren. Ik wil gewoon een nieuw formulier openen wanneer de gebruiker de methode annuleert en stopt met het uitvoeren van de methode die de methode hierboven heeft genoemd. Ik kan niet alleen een leeg of nieuw object retourneren, omdat de methode die deze retrier uitvoert, blijft werken en in veel gevallen problemen veroorzaakt.

Dus dit ziet er eigenlijk zo uit:

someValue = retry.Try(() => webService.method(),maxRetries));
//if user canceled after app wasn't able to get data stop execution as already another form is opened

Ik zou natuurlijk kunnen controleren of de geretourneerde waarde null was zoals:

someValue = retry.Try(()=>webService.method(),maxRetries));
if (someValue == null) 
return;

Maar dit zou heel wat veranderingen in de code betekenen en ik wil het vermijden en het zou het beste zijn als ik het van de Try-methode zou kunnen doen.

1

2 antwoord

Ik kan twee dingen bedenken. U kunt ervoor zorgen dat TResult van een interfacetype is met een veld Boolean dat een succesvol verzoek vertegenwoordigt (IsSuccessful of IsValid, enz.). Als u TResult niet kunt wijzigen, is de andere optie om een ​​parameter Out op uw try-methode te gebruiken om een ​​andere waarde door te geven.

0
toegevoegd

Er is geen manier om de uitvoering van een methode gewoon te stoppen. Het eerste dat in je opkomt is echter om een ​​uitzondering te maken en deze te vangen van de aanroepende methode.

Houd er echter rekening mee dat u nooit op uitzonderingen moet vertrouwen om dergelijke gegevens te beheren. Maar als u echt de aanroepmethode niet kunt herschrijven, is dit wellicht uw enige optie.

De andere optie is misschien dat uw resultaat een flag (via een interface) heeft ingesteld om de beller op de hoogte te stellen dat deze succesvol is voltooid.

0
toegevoegd