2012-04-26 9 views
2

.NET環境を初めて使用しています。 StartStopメソッドが特定のクラス、たとえばMainContextのStartメソッドとStopメソッドをそれぞれ呼び出すWindowsサービスが必要です。 MainContextクラスには、MEFによってロードされた拡張のリストが含まれます。各拡張は、同時に別のスレッドとして実行する必要があります。Windowsサービスによる同時スレッドの開始と停止

クラスMainContextには、戻り値の型と引数を含まない2つのパブリックメソッドStartStopが含まれます。 Startメソッドを呼び出すと、MEFを介してロードされた各拡張のスレッドが同時に開始されます。 Stopメソッドは、Startメソッドによって開始されたすべてのスレッドを停止します。

この状況では、どのスレッド処理が最も適していますか?私は混乱しています。 System.Threading.Tasks.TaskクラスまたはSystem.Threading.Threadクラスをマルチスレッドに使用する必要がありますか?または他の方法を使用する必要がありますか?私の要件に適していると私はより柔軟性と安定性を提供するだろうか?

+0

'System.Threading.Thread'は、' System.Threading.Tasks.Task'の代わりにあなたのニーズに合っていますが、あなたのスレッドメソッドの中にはスレッドを止めるためのロジックも必要です。 –

+0

あなたは100の拡張と1つのデュアルコアプロセッサを持っているとしましょう。 100スレッドの開始は、この場合にプログラムを速くするのに役立ちません。あなたは、あなたの内線の性質について何か言わなければなりません - 彼らはどのような仕事をしていますか? – Dennis

+0

@Dennis:100の拡張は、私のアプリケーションでは当てはまりません。最大5〜8個の内線番号が同時に実行されているとします。そして、それぞれのエクステンションには大きな仕事はありません。それは非常にシンプルで軽量の仕事、ファイルシステムの監視などと言うでしょう。 –

答えて

0

私はMAFを使用して、ファイルサーバー、データベース、Webサービスを監視するアドインを使って同様のことをしました。 Windowsサービスは、各アドインのStartメソッドとStopメソッドを呼び出し、System.Timer.Timersを有効または無効にします。実際の処理は、プールされたスレッドで実行される各タイマーの経過イベントハンドラで実行されます。

アドインの1つは、プロセス間通信を使用するデータベーステーブルを監視し、UIアプリケーションから他のアドインを監視および制御できるようにします。

関連する問題