我正在使用一些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