Я немного изменил ваш код, и у меня нет проблем с прохождением 10 итераций (VS 2008 Express), что приводит меня к следующему: действительно ли это код фактический , и если нет, уверены ли вы Вы отправили достаточно, чтобы воспроизвести проблему?
Если бы я рискнул предположить, я бы сказал, что счетчик, который вы отправляете, меняется так, что count % 5 > 0
и что в Logger.Fatal
.
возникает исключение.
private void button1_Click(object sender, EventArgs e)
{
ProcessAsync("beer", 1);
}
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 - " + count.ToString(), e.Error);
else
this.Logger.Error("LOAD ERROR - The system can't load any data - " + count.ToString(), e.Error);
this.ProcessAsync(data, count);
}
}
};
worker.RunWorkerAsync();
}
SomeLogger Logger = new SomeLogger();
class SomeLogger
{
public void Fatal(string s, Exception e)
{
System.Diagnostics.Debug.WriteLine(s);
}
public void Error(string s, Exception e)
{
System.Diagnostics.Debug.WriteLine(s);
}
}
РЕДАКТИРОВАТЬ : предложение
Сделайте попытку вызова вокруг Logger.Fatal
и посмотрите, что произойдет.
РЕДАКТИРОВАТЬ : еще одно предложение
Я подозреваю, что вы не поделились достаточным количеством кода, чтобы мы могли помочь. Ключом к успеху здесь является изоляция проблемы в фиктивном проекте, в котором достаточно кода, чтобы показать ошибку. Я был бы готов поспорить, что если вы сможете это сделать, вам, скорее всего, не нужно будет публиковать это здесь как вопрос ...
Вы можете начать с моих предположений и увидеть, что это работает просто отлично. Затем начните заменять обобщенный код на то, что вы на самом деле используете (я бы начал с реальной реализации Logger.Fatal). Ошибка, скорее всего, станет довольно очевидной в короткие сроки.