Я работаю над кодом, который вызывает услугу. Этот служебный вызов может завершиться неудачно, и если это произойдет, я хочу, чтобы система пыталась повторить попытку до тех пор, пока она не будет работать, или слишком много времени прошло.BackgroundWorker, действующий странно
мне интересно, как представляется, не будет работать должным образом, если я неправильно как следующий код ... Он делает случайным образом только один на четыре петли ...
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();
}
Приветствия Энтони
UPDATE:
Я переключил свой код снова использовать ThreadPool.QueueUserWorkItem вместо ... Так как делать это мои проблемы ушли, и семантический я могу сделать то же самое. Спасибо всем за помощь.
Не будет работать с 'worker.RunWorkerAsync();' а не 'this.ProcessAsync (data, count);'? –
@Marc Gravell: В этом случае, я думаю, ему придется использовать глобальный счетчик. – Amsakanna
Единственный способ, которым я смог получить * этот код *, чтобы терпеть неудачу, как вы описали, - это рандомизировать 'count', чтобы начать между 1 и 4 (включительно) и заставить' Logger.Fail' выбросить исключение. –