Python hat die async / await-Konstrukte in 3.5 im Jahr 2015 hinzugefügt. Die Javascript-Community hat bazzillion Jahre lang Schritte in diese Richtung unternommen und schließlich eine sehr ähnliche Implementierung zu dem 2017 veröffentlichten Entwurf in ES8 hinzugefügt (nach meinem Verständnis). Typescript fügte 2015 in Version 1.7 auch asynchrone Methoden hinzu, die für das ungeübte Auge genau wie js asynchrone Methoden aussehen.
C # 2012 wurden asynchrone Methoden hinzugefügt, die wie alle anderen Implementierungen von async / await aussehen und auf ähnlich verhaltenen, aber unterschiedlich aussehenden asynchronen Workflows von F # basieren, die 2010 in F # 2.0 eingeführt wurden. Dies ist das früheste mir bekannte Beispiel für eine in asynchroner Programmierung integrierte Sprache - C # mit dem asynchronen / wartenden Paar und F # mit asynchronen Flüssen.
Gibt es frühere Beispiele für die Schlüsselwörter, die in diesem Zusammenhang als Sprachkonstrukte (oder Bibliothek) verwendet werden? Nach meinen begrenzten Informationen sieht es so aus, als hätten alle die guten Teile der C # -Implementierung nachgeahmt, aber hat C # sie von jemand anderem kopiert?
async
await
in einer Programmiersprache suchen , ist dies ziemlich neu. Aber asynchrone Programmierung, wie sie von praktiziert wird,async
await
gibt es schon lange.Antworten:
Die Aufnahme in ein Anders Hejlsberg-Interview für Channel 9 über asynchrone Programmierung
async/await
in C # lässt sich von asynchronen Worflows in F # inspirieren.Falls Sie es nicht wissen, Anders Hejlsberg ist der leitende Architekt von C # und hat auch in anderen Sprachen gearbeitet, einschließlich TypeScript.
Laut Don Syme lassen sich F # asynchrone Workflows in seinem Blog von der Implementierung der asynchronen Monade für Haskell inspirieren. Insbesondere Peng Lis Papier und Koen Claessens "A Poor Man's Concurrency Monad" -Papier .
Falls Sie es nicht wissen, ist Don Syme unter anderem der leitende Architekt von F #.
Koen Claessens Artikel ist die ältere Implementierung von Operationen mit einem Ergebnis und Fortsetzungen, die ich aus dem Jahr 1999 finden kann. Er implementiert Parallelität, indem er atomare Operationen, Fortsetzungen und einen Round-Robin-Scheduler definiert. Der Monaid-Ansatz wäre die Motivation für den Wechsel von der Nachrichtenübermittlung zum Warten auf Ergebnisse.
Frühere Arbeiten zur Parallelität in Haskell verwenden eine Form von Kanälen oder Nachrichtenübermittlung für die Kommunikation.
In Bezug auf frühere Arbeiten muss ich Concurrent Haskell erwähnen, zu dem "A Poor Man's Concurrency Monad" eine Alternative ist ...
Und das Papier "Implizite und explizite parallele Programmierung in Haskell" von Mark P. Jones und Paul Hudak. Dieses Papier legte den Grundstein für Koen Claessens Papier.
In der Arbeit "Implizite und explizite parallele Programmierung in Haskell" analysieren Mark und Paul unter anderem die Eigenschaften von "Fork" und das Problem der Nebenwirkungen bei Parallelität. Sie verweisen auf das Papier "Eine Semantik für ML-Parallelitätsprimitive", in dem ein Satz von gleichzeitigen Primitiven basierend auf Concurrent ML ausgewählt und ein Beweis dafür erbracht wird, dass sie die Eigenschaften der sequentiellen Ausführung beibehalten.
quelle
Ich glaube, dass Microsoft nicht bereits vorhandene Wörter nehmen würde, so dass die Wörter
async
undawait
den Zeiten zugeordnet werden können, auf die Sie sich beziehen. Die Ideen von Coroutines und Cooperative Multitasking sind jedoch sehr alt.quelle