Es läuft im Grunde darauf hinaus, was der aufrufende Code tun kann, während der asynchrone Anruf ausgeführt wird. Ihr erstes Beispiel ist dafür gut geeignet. Die Benutzeroberfläche kann andere Dinge tun, wenn eine Speichermethode aufgerufen wird. Es spielt keine Rolle, was hinter den Kulissen innerhalb der Methode vor sich geht ... Die Steuerung wurde an die Anwendung zurückgegeben, um den Weg fortzusetzen.
Ihr zweites Beispiel bedeutet nur, dass der Servicestack-Dienst etwas tun könnte, während der asynchrone Datenbankaufruf ausgeführt wird. Aber wenn es nichts tut, gibt es keinen wirklichen Grund, einen Async-Aufruf zu verwenden.
Was die asynchrone Methode während ihrer Arbeit macht, ist nicht so wichtig wie das, was die aufrufende Anwendung während des Aufrufs tun kann.
Auf der Serverseite gibt es normalerweise keinen Vorteil in einer partiell %code% Lösung.
1) Web Api unterstützt async Aktionsmethoden, aber wenn ich einen Sync-Datenbank-Aufruf bei der Bearbeitung der Anfrage, dann blockiert der Thread auf den Anruf, und ich werde nicht die Vorteile einer besseren Thread-Ökonomie, die async mir geben könnte oder was?
Richtig. Sobald Sie einen synchronen (blockierenden) Datenbankaufruf durchführen, binden Sie einen Thread für die Dauer dieses Aufrufs. Daher gelten die Vorteile, die Sie von %code% erhalten hätten, nicht.
2) Wenn ich einen synchronen ServiceStack-Serviceaufruf habe, der auf einen asynchronen Datenbankaufruf wartet, was passiert dann? Ich nehme an, ein Thread ist für die Behandlung der gesamten sync http-Anfrage reserviert, und wenn dieser Thread einen asynchronen Anruf erwartet, ist er immer noch für die Web-Anfrage reserviert oder was?
Dies ist genau das gleiche wie ein synchroner Datenbankaufruf. Unter den Abdeckungen führt ein synchroner Datenbankaufruf den tatsächlichen Aufruf asynchron aus und blockiert dann den aufrufenden Thread bis zum Abschluss. Sie haben also immer noch einen Thread für die Dauer des Anrufs blockiert, und Sie erhalten keine %code% Vorteile.
Grundsätzlich kann meine Frage auf den folgenden Punkt beschränkt werden: Gibt es einen Grund, async zu verwenden, wenn nicht alle IO-Aufrufe asynchron sind?
Es gibt ein paar mehr obskure Szenarien. Sie können %code% verwenden, um einen eingeschränkten Typ von Parallelität auszuführen, was mit %code% viel einfacher ist als bei anderen Formen der asynchronen Parallelität. Aber das ist der einzige Vorteil, den ich mir vorstellen kann, wenn Sie keinen vollständigen %code% Stack haben.
Auf der Serverseite gibt es normalerweise keinen Vorteil in einer partiell async
Lösung.
1) Web Api unterstützt async Aktionsmethoden, aber wenn ich einen Sync-Datenbank-Aufruf bei der Bearbeitung der Anfrage, dann blockiert der Thread auf den Anruf, und ich werde nicht die Vorteile einer besseren Thread-Ökonomie, die async mir geben könnte oder was?
Richtig. Sobald Sie einen synchronen (blockierenden) Datenbankaufruf durchführen, binden Sie einen Thread für die Dauer dieses Aufrufs. Daher gelten die Vorteile, die Sie von async
erhalten hätten, nicht.
2) Wenn ich einen synchronen ServiceStack-Serviceaufruf habe, der auf einen asynchronen Datenbankaufruf wartet, was passiert dann? Ich nehme an, ein Thread ist für die Behandlung der gesamten sync http-Anfrage reserviert, und wenn dieser Thread einen asynchronen Anruf erwartet, ist er immer noch für die Web-Anfrage reserviert oder was?
Dies ist genau das gleiche wie ein synchroner Datenbankaufruf. Unter den Abdeckungen führt ein synchroner Datenbankaufruf den tatsächlichen Aufruf asynchron aus und blockiert dann den aufrufenden Thread bis zum Abschluss. Sie haben also immer noch einen Thread für die Dauer des Anrufs blockiert, und Sie erhalten keine async
Vorteile.
Grundsätzlich kann meine Frage auf den folgenden Punkt beschränkt werden: Gibt es einen Grund, async zu verwenden, wenn nicht alle IO-Aufrufe asynchron sind?
Es gibt ein paar mehr obskure Szenarien. Sie können Task.WhenAll
verwenden, um einen eingeschränkten Typ von Parallelität auszuführen, was mit async
viel einfacher ist als bei anderen Formen der asynchronen Parallelität. Aber das ist der einzige Vorteil, den ich mir vorstellen kann, wenn Sie keinen vollständigen async
Stack haben.
Es läuft im Grunde darauf hinaus, was der aufrufende Code tun kann, während der asynchrone Anruf ausgeführt wird. Ihr erstes Beispiel ist dafür gut geeignet. Die Benutzeroberfläche kann andere Dinge tun, wenn eine Speichermethode aufgerufen wird. Es spielt keine Rolle, was hinter den Kulissen innerhalb der Methode vor sich geht ... Die Steuerung wurde an die Anwendung zurückgegeben, um den Weg fortzusetzen.
Ihr zweites Beispiel bedeutet nur, dass der Servicestack-Dienst etwas tun könnte, während der asynchrone Datenbankaufruf ausgeführt wird. Aber wenn es nichts tut, gibt es keinen wirklichen Grund, einen Async-Aufruf zu verwenden.
Was die asynchrone Methode während ihrer Arbeit macht, ist nicht so wichtig wie das, was die aufrufende Anwendung während des Aufrufs tun kann.
Tags und Links asp.net-web-api c# asynchronous servicestack