Neds Antwort ist ziemlich gut, also werde ich nicht wiederholen, was er sagte (obwohl beachten Sie, dass der Overhead nicht unbedingt groß im Vergleich zu den Kosten der E/A-Operation selbst ist).
Ein weiterer wichtiger Grund, die synchronen Methoden zur Verfügung zu stellen, ist eigentlich im Nachhinein offensichtlich - Leute haben ernsthafte Schwierigkeiten, asynchrone Operationen zu verstehen. Sie sind es gewohnt, "Lesen, dann schreiben, dann wieder lesen ..." Fehlerbehandlung, Fehlerlokalität, Synchronisation ... alle können sehr schwierig werden, besonders wenn Sie await
nicht verwenden können.
Die Wahrheit ist, während es sehr schön wäre, wenn alles im Laufe der Zeit asynchron wird, ist es viel schwieriger, über asynchrone Anwendungen zu begründen. Es ist immer noch besser als Multi-Threading, aber nicht viel.
Auf diese Weise kann die Verwendung von asynchronen Methoden als eine Optimierung angesehen werden - und Sie tun keine Optimierungen, wenn Sie wissen sie werden erheblich helfen. Für eine Bibliothek ist dies schwer zu entscheiden - also bieten beide Möglichkeiten. Jemand, der einen Server mit hohem Durchsatz schreibt, wird die Sorgfalt auf sich nehmen, die benötigt wird, um eine performante und zuverlässige asynchrone Anwendung zu schreiben. Jemand, der gerade ein einfaches CMS schreibt, möchte es vielleicht komplett vermeiden.
Dies gilt insbesondere für C#/NET unter 4,5 -. Versuchen, Fehler zu tun Umgang auf asynchrone Fortsetzungen ohne await
, und Sie werden sehen, was ich rede
:)
Keeping Code einfach ist sehr wichtig. Es senkt die Entwicklungs- und Wartungskosten erheblich und erleichtert Neueinsteigern das Verständnis.
Ich würde sagen, das ist ein bisschen eigensinnig (weil, wenn Sie sie nur überladen mit Warte in Ihrer Implementierung als nichts gewonnen werden kann), aber ich würde diese enthalten - keine Notwendigkeit, Ihren Benutzer zu async zwingen, wenn er nicht will (egal ob seine Gründe gut oder schlecht sind) - aber das ist nur meine * Meinung * (node.js Leute werden eine ganz andere haben) - deshalb könnte deine Frage bald geschlossen sein - es kann keine gute Antwort geben – Carsten
I glaube nicht, dass es nur eine Frage der Meinung ist ... Ich bin mir ziemlich sicher, dass es irgendwo eine Art Richtlinie oder Best Practice gibt. Andererseits ist eine Best Practice eine Meinung, also sollten wir vielleicht nicht nach Best Practices zu Stack Overflow fragen? – Gigi
@Gigi vielleicht solltest du * this * auf Meta fragen;) - ich wollte dir nur einen Hinweis geben, wieso du jetzt 2 nahe Flaggen hast - nicht zu streiten – Carsten