おそらく独自のスレッドプールが必要です。 .NET 4.0を使用している場合は、BlockingCollection
クラスを使用すると、実際には自分のロールするのはかなり簡単です。
public class CustomThreadPool
{
private BlockingCollection<Action> m_WorkItems = new BlockingCollection<Action>();
public CustomThreadPool(int numberOfThreads)
{
for (int i = 0; i < numberOfThreads; i++)
{
var thread = new Thread(
() =>
{
while (true)
{
Action action = m_WorkItems.Take();
action();
}
});
thread.IsBackground = true;
thread.Start();
}
}
public void QueueUserWorkItem(Action action)
{
m_WorkItems.Add(action);
}
}
これは本当にすべてです。制御する実際のプールごとにCustomThreadPool
を作成します。私は、粗スレッドプールを取得するために最低限のコードを投稿しました。当然のことながら、具体的なニーズに合わせてこの実装を調整して拡張することもできます。