Was sind die Vorteile von asynchronen Webdiensten, wenn nicht alle Teile des Codes asynchron sind?

8
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer16841118 ___

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.

    
___ qstnhdr ___ Was sind die Vorteile von asynchronen Webdiensten, wenn nicht alle Teile des Codes asynchron sind? ___ tag123asynchronous ___ Asynchrones Programmieren ist eine Strategie zum Verzögern von Operationen mit hoher Latenz oder niedriger Priorität, üblicherweise um die Leistung, Reaktionsfähigkeit und / oder die Kompostierbarkeit von Software zu verbessern. Solche Strategien werden normalerweise unter Verwendung einer Kombination von ereignisgesteuerter Programmierung und Rückrufen verwendet und verwenden optional die Nebenläufigkeit durch Koroutinen und / oder Threads. ___ tag123aspnetwebapi ___ Die ASP.NET-Web-API ist ein Framework zum Erstellen von HTTP-Diensten für Clients wie Browser und mobile Geräte. Es basiert auf dem Microsoft .NET Framework und ist ideal für den Aufbau von RESTful-Diensten. ___ tag123servicestack ___ ServiceStack ist ein schneller, einfacher und vielseitiger nachrichtenbasierter Webservice und MQ Framework für .NET und .NET Core ___ answer16841486 ___

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.

    
___
Stig Schmidt Nielsson 30.05.2013, 16:03
quelle

2 Antworten

7

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.

    
Stephen Cleary 30.05.2013, 16:33
quelle
3

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.

    
Josh 30.05.2013 16:15
quelle