处理任务工厂例外

时间:2011-04-18 14:32:33

标签: vb.net task-parallel-library taskfactory

我已经设置了一个创建新任务来处理文件处理的过程。出现问题,我收到和未处理异常错误,只需单击继续按钮,主进程继续运行。现在我还发现在子任务中我遇到了文件冲突错误,并且当任务作为单独的.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

现在我从msdn得到了totalexception的东西而不确定如何实现它但基本上我想要的是取消导致异常的任务并继续运行所有其他任务并捕获被取消的任务正在处理的文件和将名称保存到我的日志中,或者如果可能的话,用它正在处理的文件重新启动该任务..

现在对于第二个问题,当一个类被任务访问时,我创建了一个xmlwriter,该任务应该创建自己的实例,所以不确定为什么会发生冲突但如果确实发生了,那么任务/线程是否正确取消或等待访问该文件。

   ....
public class filecleaner

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

1 个答案:

答案 0 :(得分:1)

对于你的第二个问题,任务不会等待访问文件,它会抛出异常,你必须捕获,暂停,然后再试一次(达到一些计数限制,我猜如果你想要那种行为。

首先,我不确定是否足够继续这里。例如,为什么你说“任务作为单独的.exe运行”?例如,如果您只是在启动backgroundworker对象,它们不会作为单独的“进程”(即exe)运行,它们只是线程。

这段代码中没有任何内容可以暗示你正在为你的任务获得单独的进程,但是,根据startne中发生的情况,我认为这是可能的。