Ich fragte eine Frage here darüber, warum das Starten eines Prozesses mit Thread.Run nicht so viele gleichzeitige Anforderungen ausgeführt, wie ich erwartet hatte.Handle rabbitmq Nachrichten concurrenrtly
Der Grund hinter dieser Frage war, dass ich versuchte, eine Klasse zu erstellen, die Nachrichten aus einer Rabbitmq-Warteschlange ziehen und gleichzeitig bis zu einer maximalen Anzahl gleichzeitiger Nachrichten verarbeiten kann.
Um dies zu tun, endete ich mit der folgenden Received
Handler der EventingBasicConsumer
Klasse.
Die Kommentare auf den vorherigen Beitrag sollten jedoch nicht einen Thread starten, es sei denn CPU gebunden Arbeit.
Der obige Handler weiß nicht, ob die Arbeit CPU-gebunden, Netzwerk, Festplatte oder anderweitig ist. (Process
ist eine abstrakte Methode).
Trotzdem denke ich, ich muss hier einen Thread oder eine Aufgabe starten, sonst blockiert die Process
Methode den rabbitmq-Thread und der Event-Handler wird erst wieder aufgerufen, wenn er fertig ist. Ich kann also nur eine Methode gleichzeitig anwenden.
Starte eine neue Thread
hier in Ordnung? Ursprünglich hatte ich Task.Run
verwendet, aber dies produzierte nicht so viele Arbeiter wie gewünscht. Siehe anderen Beitrag.
FYI. Die Anzahl der gleichzeitigen Threads wird durch Festlegen der InitialCount
auf dem Semaphor begrenzt.