我正在使用一些REST請求使用Mono.Mac(3.2.3)與服務器進行通信,並且作爲重試機制,我正在悄悄地嘗試爲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),作爲一個學習練習,我學會了更多地愛上「異步/等待」。 – Noseratio