2012-03-29 8 views
1

2つのタスクを実行するコンソールアプリケーションを作成しています。
アプリは、それが実行しない場合、それは次の操作を行います、オフピークの時間帯に一日一回、Windowsのスケジューラで実行されます:SQLのテーブルを更新し、数百のファイルとコンソールを使ってマルチスレッドや並列タスクを処理する方法

  • スキャン5-6フォルダをファイル名は
  • このアプリケーションは他の2つのアプリケーションによって参照されますが、これらのアプリケーションはパブリックメソッドを使用してSQLテーブルに例外を書き出します。例外は、ビジネスルールの例外の多くです。

割り当てられたタスクを実行するためにスケジューラがアプリケーションを呼び出す可能性があります。また、同時に他のアプリケーションもアプリケーションを呼び出す可能性があります。どのように私は競合がないことを確認するために、アプリケーションを設計するだろう。私はマルチスレッド、並列タスクのラインに沿って考えていますか?

+0

あなたはどの言語を使用していますか?適切なタグを入れてください。 – Tudor

答えて

2

本当に何もする必要はありません。この場合、OSはすべての並列処理を処理します。タスクスケジューラは、1つのプロセスを開始します。あなたのアプリケーションを使用する他のアプリは、別々のプロセスで動作しています。すべての処理を1つのスレッドで実行することができ、両方のタスクを引き続き並列処理することができます。

注意する必要があるのは、共有リソースだけです。たとえば、これを実行中にハードコードされたログファイルに書き込む場合、タスクの1つが失敗するか、ログファイルが書き込み可能になるまで待つ必要があります。

愚かなことをしない限り、SQLアクセスは問題ありません。トランザクションのタスクに関連するすべてのクエリを実行して、トランザクションの最後にデータベースを一貫した状態にしておきます。

問題の潜在的な原因の1つは、私がそれらを呼び出すのが好きなようなふりをしてシリアライズ可能なトランザクションです。 MSSQLでは、彼らはSNAPSHOT transactionsと呼ばれます。確実に完全に安全なものにするには、シリアライズ可能なトランザクションを使用してください。競合によってコミットが失敗した場合は、すべての処理を再試行してください。

関連する問題