【发布时间】:2014-01-24 04:41:07
【问题描述】:
我正在使用 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# multithreading task-parallel-library