Ponowne uruchamianie zadania w tle, jeśli wystąpią pewne błędy

Korzystam z niektórych żądań REST używających Mono.Mac (3.2.3) do komunikowania się z serwerem, a jako mechanizm ponawiania próbuję po cichu przekazywać akcje HTTP wielokrotnym próbom, jeśli zawiodą lub przekroczą limit czasu.

Mam następujące;

var tries = 0;
while (tries <= ALLOWED_TRIES)
{
    try
    {
        postTask.Start();
        tries++;
        if (!postTask.Wait(Timeout))
        {
            throw new TimeoutException("Operation timed out");
        }
        break;
    } catch (Exception e) {
        if (tries > ALLOWED_TRIES)
        {
            throw new Exception("Failed to access Resource.", e);
        }
    }
}

Gdzie zadanie używa parametrów metody nadrzędnej w ten sposób;

var postTask = new Task<HttpWebResponse>(() => {return someStuff(foo, bar);},
    Task.Factory.CancellationToken, 
    Task.Factory.CreationOptions);

Problemem wydaje się być to, że zadanie nie chce być uruchamiane ponownie za pomocąpostTask.Start() po jego pierwszym zakończeniu (i kolejnej awarii). Czy można to zrobić w prosty sposób, czy też w ten sposób nadużyję zadań? Czy istnieje jakaś metoda, która przywraca zadanie do stanu początkowego, czy może lepiej korzystać z jakiejś fabryki?

questionAnswers(2)

yourAnswerToTheQuestion