обработка фабричных исключений задач - PullRequest
0 голосов
/ 18 апреля 2011

Я настроил процесс создания новых задач для обработки файлов. Возникла проблема, когда я получил ошибку необработанного исключения и, просто нажав кнопку «Продолжить», основной процесс продолжал выполняться. Теперь я также обнаружил, что в дочерней задаче у меня возникла ошибка конфликта файлов, и поскольку задачи выполнялись как отдельный .exe, у меня сложилось впечатление, что все было бы поточно-ориентированным. Итак, для первого вопроса здесь - создание задачи в основном процессе. GProcess - это законченный проект, состоящий из 6 классов. Это добавляется как ссылка на библиотеку классов для основного класса процесса form1

Public Class Form1
 ..Private parser as GProcess.module = new GProcess.module()

dim factory as new taskfactory
factory.startnew(address of parser.main)

try
   task.waitall()
catch ae as aggregateexception
   for each ex in ae.innerexceptions
     logs.insert(ex.message.tostring)
   next
finally
  parser.ctsources.cancel()
end try

Теперь я получил функцию aggregateexception от msdn и не знаю, как ее реализовать, но в основном я хочу отменить задачу, которая вызвала исключение, и продолжить выполнение всех других задач и захватить файл, над которым работала отмененная задача, и сохраните имя в моих журналах или, если возможно, перезапустите задачу с файлом, над которым он работал ..

Теперь по второму вопросу у меня создается xmlwriter, когда задача обращается к классу, который должен создать свой собственный экземпляр, поэтому не уверен, почему происходит конфликт, но если это происходит, задача / поток просто отменить или ожидает доступа к файлу.

   ....
public class filecleaner

private xmlfile as string = directoryPath & filename
private xwriter as xmltextwriter = new xmltextwriter(xmlfile,nothing)
....

1 Ответ

1 голос
/ 18 апреля 2011

По вашему второму вопросу задача не будет ждать доступа к файлу, она выдаст исключение, которое вы должны перехватить, приостановить, а затем повторить попытку (до некоторого предела количества, я думаю ) если вы хотите такого поведения.

Во-первых, я не уверен, что здесь хватит. Например, почему вы говорите, что «задачи запускаются как отдельный .exe»? Например, если вы просто раскручиваете объекты backgroundworker, они не запускаются как отдельные «процессы» (т.е. exe), а просто как потоки.

В этом коде нет ничего, что указывало бы на то, что вы получаете отдельные процессы для своих задач, но, в зависимости от того, что происходит в startne, я полагаю, это возможно.

...