Ich habe Windows-Dienst, der Anfragen erhalten kann, möchte ich in jeder Anfrage in getrennten Thread behandeln.ThreadPool oder Task.Factory
Ich möchte auch die Anzahl der Threads, d. H. Maximal 5 Threads begrenzen.
Und ich will für alle Threads warten, bevor ich die Anwendung der Nähe bin,
Was ist der beste Weg, das zu tun?
Was ich versucht:
for (int i = 0; i < 10; i++)
{
var i1 = i;
Task.Factory.StartNew(() => RequestHandle(i1.ToString())).ContinueWith(t => Console.WriteLine("Done"));
}
Task.WaitAll();//Not waiting actually for all threads, why?
Auf diese Weise i die Anzahl der theads begrenzen?
Oder
var events = new ManualResetEvent[10];
ThreadPool.SetMaxThreads(5, 5);
for (int i = 0; i < 10; i++)
{
var i1 = i;
ThreadPool.QueueUserWorkItem(x =>
{
Test(i1.ToString());
events[i1].Set();
});
}
WaitHandle.WaitAll(events);
Es gibt einen anderen Weg, dies zu implementieren?
Wie bekommen Sie Anfragen? Diese Art von Angelegenheiten. Es ist nicht so klar, dass Sie den Pool benutzen sollten. Und SetMaxThreads() ist app-global, Sie verhindern, dass die Threads Helfer-Threads abspalten. –
* Sobald Sie 'new Thread()' eingeben, ist es vorbei; Ihr Projekt hat bereits Legacy-Code. * Parallelität in C# -Kochbuch, @StephenCleary - was auch für den 'ThreadPool' gilt –
http://StackOverflow.com/questions/9315937/net-tpl-limited-concurrency-level-task-scheduler -mit-Task-Priorität, https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.maximumconcurrencylevel, ... –