【发布时间】:2010-05-11 04:21:36
【问题描述】:
我正在编写一些调用服务的代码。此服务调用可能会失败,如果失败,我希望系统重试,直到它正常工作或时间过长。
我想知道我哪里出错了,因为以下代码似乎无法正常工作...它随机只执行一到四个循环...
protected virtual void ProcessAsync(object data, int count)
{
var worker = new BackgroundWorker();
worker.DoWork += (sender, e) =>
{
throw new InvalidOperationException("oh shiznit!");
};
worker.RunWorkerCompleted += (sender, e) =>
{
//If an error occurs we need to tell the data about it
if (e.Error != null)
{
count++;
System.Threading.Thread.Sleep(count * 5000);
if (count <= 10)
{
if (count % 5 == 0)
this.Logger.Fatal("LOAD ERROR - The system can't load any data", e.Error);
else
this.Logger.Error("LOAD ERROR - The system can't load any data", e.Error);
this.ProcessAsync(data, count);
}
}
};
worker.RunWorkerAsync();
}
干杯 安东尼
更新:
我已将我的代码切换为使用 ThreadPool.QueueUserWorkItem... 自从这样做后,我的问题就消失了,并且在语义上我可以做同样的事情。感谢大家的帮助。
【问题讨论】:
-
它不适用于
worker.RunWorkerAsync();而不是this.ProcessAsync(data, count);吗? -
@Marc Gravell:在这种情况下,我认为,他将不得不使用全局计数器。
-
我能够让 此代码 像您描述的那样失败的唯一方法是将
count随机化为从 1 到 4(含)开始并让 @987654325 @ 抛出异常。 -
该服务是您可以控制的 WCF 服务吗?如果是这样,请考虑 WCF 可靠会话。
标签: c# .net multithreading backgroundworker long-running-processes