Ich habe eine Komponente von Drittanbietern, die "teuer" ist, um hochzufahren. Diese Komponente ist nicht Thread-sicher. Diese Komponente wird (vorerst) in einem WCF-Dienst gehostet, also ... jedes Mal, wenn ein Anruf in den Dienst kommt, muss ich die Komponente neu aufbauen."Fixed"/"Load Balanced" C# Thread-Pool?
Was ich stattdessen tun möchte, ist ein Pool von sagen wir 16 Threads, die jeweils ihre eigene Kopie der Komponente hochfahren und einen Mechanismus haben, um die Methode aufzurufen und sie an einen der 16 Threads verteilen zu lassen der zurückgegebene Wert
So etwas Einfaches wie:
var response = threadPool.CallMethod(param1, param2);
Sein feine für den Anruf zu blockieren, bis er eine Antwort bekommt, als ich die Antwort auf vorgehen muß.
Irgendwelche Vorschläge? Vielleicht überschätze ich es und eine ConcurrentQueue
, die von 16 Threads bedient wird, würde den Job tun, aber jetzt sicher, wie der Rückgabewert der Methode an den Aufrufer zurückgegeben würde?
Müssen wissen, mehr über die Komponente. 1) Ist es eine COM-Komponente? 2) Wie hosten Sie den WCF-Dienst? IIS? In einem Windows-Dienst? Konsolen-App? 3) Was ist die Instanzkontrolle des WCF-Dienstes? Singleton? Per Anruf? Pro Sitzung? – MickyD
Zusätzlich zu dem, was @MickyD gesagt hat, löst das Einfädeln eines Aufrufs zum Erstellen einer neuen Instanz der Komponente Ihr Thread-Sicherheitsproblem nicht (ich denke, das macht es sogar noch schlimmer). – AWinkle
Es klingt wie das, was Sie wirklich brauchen, ist ein Objekt-Pool, kein Thread-Pool. –