Ich habe einige ConcurrentQueue die Aktion enthalten (System.Action). Jede Aktion in dieser Warteschlange muss ausgeführt werden (muss mit invoke aufgerufen werden).Wie kann die Anzahl der aktiven Aufgaben begrenzt werden, die über die Parallel Task Library ausgeführt werden?
Wenn die Warteschlange nicht leer ist => müssen die zu ergreifenden aufrufen => Aber ich möchte einige Begrenzung für die Anzahl der parallelen Aufgabe machen, die ausgeführt wird. Darüber hinaus kann jederzeit eine neue Aktion zur Warteschlange hinzugefügt werden.
Wie geht das?
(mit .net 4.0)
ich etwas geschrieben, aber ich nicht sicher, dies ist der beste Ansatz
SemaphoreSlim maxThread = new SemaphoreSlim(5);
while(!actionQueue.IsEmpty)
{
maxThread.Wait();
Task.Factory.StartNew(() =>
{
Action action;
if(actionExecution.TryDequeue(out action))
{
action.Invoke();
}
},
TaskCreationOptions.LongRunning).ContinueWith((task) => maxThread.Release());
}
}
Können Sie das eigentliche Problem erklären? Warum haben Sie das Bedürfnis, die Anzahl der Aufgaben zu begrenzen? –
nur akademische Erfahrung .. Ich möchte lernen. aber ich möchte auch wissen, warum ich diese Grenze nicht machen muss? – Yanshof
Es besteht keine Notwendigkeit, die Anzahl der Aufgaben zu beschränken - ich sehe jetzt sind Sie sprechen * gleichzeitig ausgeführten * Aufgaben und nicht die Gesamtzahl in der Warteschlange; Die Antwort von lazyberezovsky ist die richtige für dieses Szenario. –