私のサーバー上のディレクトリにあるファイルを処理するのに効果的なアプリがあります。このプロセスは次のとおりです。ファイルが同時に到着したときに処理する#
1) check for files in a directory
2) queue a user work item to handle each file in the background
3) wait until all workers have completed
4) goto 1
これはうまく動作し、私は二回処理されているか、複数のスレッドが同じファイルのために生み出されたされている同じファイルを心配することはありません。ただし、処理に時間がかかりすぎるファイルが1つある場合は、その1つのファイルでステップ3がハングし、その他の処理はすべて終了します。
私の質問は、処理が必要なファイルごとに正確に1つのスレッドを生成する正しいパラダイムは何か、1つのファイルが長時間かかる場合はブロックしないのですか?私はFileSystemWatcherと考えましたが、ファイルがすぐに読み込めない場合があります。なぜなら、私は常にすべてのファイルを見て、それぞれのプロセスを生成しているからです(ファイルがロックされているとすぐに終了します)。
手順3を削除して、すでに処理したファイルのリストを維持する必要がありますか?それは厄介で、リストは時間の経過とともに非常に大きくなるので、より洗練されたソリューションがあると思われます。
処理後のファイルはどうなりますか?それは同じディレクトリに残っていますか?削除?動いた?また、サーバディレクトリにダンプされたファイルは、同じ拡張子で一貫して名前が付けられていますか? – gangelo
上記のプロセスがファイルが2回処理されないように私は理解していません。 –
ファイルが処理された後、ステップ#2で削除されたので、ステップ#3が完了すると、そのフォルダ内のファイルは処理され、以前に処理されていません。 – powlette