Wann und warum sollten Sie in C # 5.0 ASP.NET MVC 4 oder Web API keine taskbasierte asynchrone Programmierung verwenden?

8

Ich versuche, mich mit der asynchronen Programmierung in C # 5 herumzuschlagen, und die Frage, die ich mir immer wieder stelle, ist, warum man sie nicht ständig (für ASP.NET MVC 4 oder Web API) wie node.js verwendet Jungs machen?

Gibt es irgendwelche Nachteile (unnötiger Overhead) außer dem Code nicht so einfach (was ist IMHO ein Witz, da die neue Syntax großartig und leicht zu verstehen ist)?

    
W3Max 20.03.2012, 01:00
quelle

2 Antworten

8

Verwenden Sie es meistens überall überall. Deshalb haben sie alles, was länger als 50 ms dauert, zu einem asynchronen Anruf gemacht:).

Es wird jedoch die gleichen Fallstricke haben wie jeder asynchrone Code. Debugging könnte kniffliger werden. Wenn Sie mit einer Sache beginnen und dann zu einer langen Aufgabe im Benutzeroberflächenthread zurückkehren, kann dies zu einem falschen Einfrieren führen (der Benutzer konnte sich nach dem Klick bewegen, kann aber später nichts tun, solange er es sieht). Etc.

Wenn Sie Code durchlaufen, der auf Werte wartet, verhält er sich trotzdem wie ein synchroner Code. Und wenn es den Cache oder eine schnelle Aktion erreicht, wird es aus Effizienzgründen nicht asynchron ausgeführt. Also, dieser letzte Punkt bedeutet, dass, obwohl es Overhead gibt, um Compiler-Magie in diesen Aufrufen durchzuführen, diese Magie nicht ausgeführt wird, wenn der Aufruf bereits abgeschlossen ist und daher den Overhead nicht wert ist.

Also, ja, ich würde sagen, benutze es fast überall :) Es ist ein großartiger Schritt für .NET

AKTUALISIEREN

Wenn dieser Artikel dann geglaubt wird es rechtfertigt nur, was ich sage. Wenn der Anruf weniger als 50 ms dauert, ist er aufgrund des Overheads nicht und sollte nicht asynchron sein, um ihn so zu schreiben. Und tatsächlich wird in den meisten Fällen die synchrone Aktion anstelle der asynchronen Aktion ausgelöst. Wenn es jedoch über 50 ms ist, profitieren Sie nur vom asynchronen Anruf

    
Justin Pihony 20.03.2012, 01:03
quelle
0

Dies hängt von der CPU- oder IO-gebundenen Operation ab, die Sie auf dem Server ausführen möchten. Hier sind einige Auszüge aus MSDN

  

Im Allgemeinen verwenden Sie asynchrone Pipelines unter folgenden Bedingungen   sind wahr:

     

Die Operationen sind netzwerkgebunden oder I / O-gebunden anstelle von CPU-gebunden.

     

Tests zeigen, dass die blockierenden Operationen einen Engpass in der Site darstellen   Leistung und dass IIS mehr Anfragen mit Hilfe bedienen kann   asynchrone Aktionsmethoden für diese blockierenden Aufrufe.

     

Parallelität ist wichtiger als die Einfachheit des Codes.

     

Sie möchten einen Mechanismus zur Verfügung stellen, mit dem Benutzer eine lange Ausführung abbrechen können   Anfrage.

    
satish 30.10.2013 16:35
quelle