Stop әдісін орындау

Менің веб-қызметтен ақпаратты бірнеше рет алуға тырысатын сынып бар:

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

Енді «егер (numTries == maxRetries)» пайдаланушысы веб-қызметтен деректерді алуды жалғастырғысы немесе бас тартқысы келсе, оны таңдай алады. Пайдаланушы жоғары әдіс деп аталатын әдісті орындаудан бас тартқан және тоқтатқан кезде жаңа пішінді ашқым келеді. Мен тек нөлдік немесе жаңа нысанды қайтара алмаймын, себебі бұл ретерді іске қосатын әдіс жұмысын жалғастырады және көптеген жағдайларда проблемаларды тудырады.

Осылайша, негізінен бұл көрінеді:

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

Әрине, қайтарылған мән нөлге тең болғанын тексере аламын:

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

Бірақ бұл кодексте көптеген өзгерістерді білдіріп, оны болдырмауды қалаймын, және мен оны Try әдісінен істей аламын.

1

2 жауаптар

Мен екі нәрсені ойлаймын. TResult - сәтті сұрауды (IsSuccessful немесе IsValid және т.б.) білдіретін Boolean өрісі бар Интерфейс түрінде екенін тексеруге болады. Егер сіз TResult түрін өзгерте алмасаңыз, басқа параметр - басқа мәнді енгізу үшін сынақ әдісіңізде Out параметрін пайдалану.

0
қосылды

Әдістің орындалуын тоқтатуға ешқандай мүмкіндік жоқ. Алғашқы нәрсе - ақылға келеді, дегенмен, алып тастау және оны қоңырау әдісінен ұстау.

Есіңізде болсын, сіз осындай ағындарды басқаруға ерекше жағдайларға сенбейміз .. бірақ шынымен шынымен қоңырау әдісін қайта жазу мүмкін емес, бұл сіздің жалғыз нұсқа болады.

Басқа опция, мүмкін, сіздің қайтарылған нәтижеңізді қоңырау шалушы сәтті аяқталғандығы туралы хабарлау үшін жалаушаны орнатады (интерфейс арқылы).

0
қосылды