Frage

Hier sind meine Grundannahmen:

  1. Wcf führt meinen Dienst Operationsmethoden auf IOCP Gewinde (UnsafeQueueNativeOverlapped) anstelle von normalen Threadpool Threads (QueueUserWorkItem).

  2. Blocking I / O sollte nicht innerhalb von Einweg-Service-Betrieb Methoden durchgeführt werden.

  3. Blocking I / O sollte nicht innerhalb eines normalen Threadpool-Thread ausgeführt werden.

Ich glaube, dass die beste Strategie ist es, Kette async Anrufe . Also, wenn ich eine Nachricht in meinen Einweg Service-Betrieb zu erhalten, habe ich dann einen asynchronen Aufruf an meine db tun und wenn das abgeschlossen ist, tun, um meinen nächste async db Anruf usw. und schließlich über meinen Wcf Rückruf reagieren ...

Allerdings ist es schwer, jeden einzelnen Datenbank-Aufruf async zu tun. Ich habe Zuflucht Regeln 2 und 3 oben zu brechen, aber ich mag es nicht, weil ich glaube, das ist schließlich den Thread verhungern. Gibt es bessere Strategien?

Ich habe in mit Jon Skeet CustomThreadPool sieht, aber ich bin nicht sicher, ob das die Antwort auch nicht.

War es hilfreich?

Lösung

Ich würde vorschlagen, breche die Regel 3 durch synchrone I / O-Schlange fordert der Thread auszuführen. Die Service-Methoden nach wie vor sofort zurück, aber die Arbeit wird schließlich im Hintergrund getan, vielleicht eine Rückkehr Meldung tritt aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top