WCF インターフェイスで使用されるコントローラー クラスがあります (SOAP および REST インターフェイスがあります)。
そのため、誰かが を呼び出すと、SubmitJob
それをコントローラーに渡します。
コントローラー関数では、それをキューに保存します。
現在、私のプロジェクトには、このクラスで定義されているキューがあります。
public static class WebServiceControllerStatic
{
static ConcurrentQueue<WebServiceModels.Job> jobqueue = new ConcurrentQueue<WebServiceModels.Job>();
次に、これらの 2 つの方法があります。1 つは情報をキューに入れ、もう 1 つはスレッドを開始してキューを処理します。
public static WebServiceModels.Job[] JobQueue
{
set
{
value.AsParallel().ForAll(i => jobqueue.Enqueue(i));
}
}
public static void ProcessUpdateJobQueue()
{
Action UpdateJob = () =>
{
if (jobqueue.IsEmpty)
return;
int cnt = 0;
Parallel.For(0, jobqueue.Count, new ParallelOptions() { MaxDegreeOfParallelism = 20 },
(j) =>
{
cnt++;
});
};
if (processUpdateJobThread == null)
{
processUpdateJobThread = new System.Threading.Thread(() =>
{
while (true)
{
UpdateJob();
UpdateJob();
System.Threading.Thread.Sleep(10000);
}
});
processUpdateJobThread.Start();
}
}
そして、私のコントローラーメソッドでは、あなたの場合、SubmitJob 呼び出しが行われるたびに、これを呼び出します。
WebServiceControllerStatic.JobQueue = jobs;
WebServiceControllerStatic.ProcessUpdateJobQueue();
そのため、処理する必要があるものを保持する 1 つのキューと、キューにあるものを処理するために頻繁に起動するスレッドがあります。
そして、これは私のニーズに適しています。
ConcurrentQueue を使用した主な理由は、キューの更新と削除を同時に行うためです。