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)?
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
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.
Tags und Links asp.net-mvc asp.net-web-api asp.net-mvc-4 c#-5.0