0

ファイル処理を処理するための新しいタスクを作成するプロセスを設定しました。例外エラーを受け取って処理せず、続行ボタンをクリックするだけでメインプロセスが実行され続けるという問題が発生しました。また、子タスク内でファイルの競合エラーが発生し、タスクが個別の.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からaggregateexceptionのものを取得し、それを実装する方法がわかりませんが、基本的に私がしたいのは、例外を引き起こしたタスクをキャンセルし、他のすべてのタスクの実行を続行し、キャンセルされたタスクが作業していたファイルをキャプチャして名前を保存することですログに記録するか、可能であれば、作業中のファイルでそのタスクを再開します。

2番目の問題では、タスクがクラスにアクセスしたときにxmlwriterが作成されます。このタスクは、独自のインスタンスを作成する必要があるため、衝突が発生した理由はわかりませんが、衝突が発生した場合は、タスク/スレッドをキャンセルするか、実行します。ファイルへのアクセスを待機します。

   ....
public class filecleaner

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

1 に答える 1

1

2番目の質問では、タスクはファイルへのアクセスを待機せず、例外をスローします。例外をキャッチし、一時停止してから再試行する必要があります(カウント制限まで、私は推測します)そういう振る舞いをしたい。

まず、ここで続けるのに十分かどうかわかりません。たとえば、「タスクは個別の .exe として実行される」と言うのはなぜですか? たとえば、backgroundworker オブジェクトをスピンアップするだけの場合、それらは個別の「プロセス」(exe など) として実行されず、単なるスレッドです。

このコードには、タスクに対して個別のプロセスを取得していることを示唆するものは何もありませんが、startne で何が起こるかによっては、可能だと思います。

于 2011-04-18T16:03:36.553 に答える