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?