Mono.Mac (3.2.3)을 사용하여 서버와 통신하는 일부 REST 요청을 사용하고 있으며 재시도 메커니즘으로 HTTP 작업에 여러 번 시도하려고합니다. 그들이 실패하거나 시간이 초과되면.특정 오류가 발생하면 백그라운드에서 작업 다시 시작
다음과 같은 내용이 있습니다.
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);
}
}
}
여기서 태스크는 부모 메소드의 매개 변수를 사용합니다.
var postTask = new Task<HttpWebResponse>(() => {return someStuff(foo, bar);},
Task.Factory.CancellationToken,
Task.Factory.CreationOptions);
문제는 먼저 완료 (이후 실패)의 후 작업이 postTask.Start()
다시 실행하고 싶지 않은 것 같다. 이 작업을 수행하는 간단한 방법이 있습니까, 아니면 이런 식으로 작업을 잘못 사용합니까? 작업을 초기 상태로 재설정하는 메소드가 있습니까? 아니면 어떤 종류의 팩토리를 사용하는 것이 더 낫지는 않습니까?
이것은 C# 5.0을 가정합니다. 그것은 그것이 옵션이라는 질문에서 나에게 명확하지 않습니다. – svick
@svick 코드는 읽을 수있는 것은 아니지만 'ContinueWith' 콜백을 사용하여 동일한 작업을 수행 할 수 있습니다. – Noseratio
@svick, 여기는 [.NET 4.0 버전] (http://stackoverflow.com/a/21346870/1768303)으로, 저를위한 학습 활동으로, 나는 'async/await'를 더 좋아한다는 것을 배웠습니다. – Noseratio