Python menambahkan konstruk async / menunggu di 3,5 pada 2015. Komunitas Javascript membuat langkah-langkah ke arahnya selama jutaan tahun dan akhirnya menambahkan implementasi yang sangat mirip dengan konsep dalam ES8 yang dirilis pada 2017 (Dari pemahaman saya). Typescript juga menambahkan metode async pada 2015 di versi 1.7 yang pada mata yang tidak terlatih terlihat persis seperti metode js async.
C # Menambahkan metode async pada tahun 2012 yang terlihat seperti semua implementasi async / menunggu lainnya dan didasarkan pada F # yang berperilaku sama tetapi alur kerja asinkron yang tampak berbeda yang diperkenalkan pada F # 2.0 pada tahun 2010. Ini adalah contoh paling awal yang saya ketahui tentang bahasa yang dibangun pada pemrograman asinkron. - C # dengan pasangan async / await dan F # dengan aliran async.
Apakah ada contoh kata kunci sebelumnya yang digunakan dalam konteks ini sebagai konstruksi bahasa (atau pustaka)? Dari informasi saya yang terbatas, sepertinya semua orang meniru bagian baik dari implementasi C #, tetapi apakah C # menyalinnya dari orang lain?
async
await
dalam bahasa pemrograman, itu cukup baru. Tetapi pemrograman asinkron seperti yang dipraktekkanasync
await
telah ada sejak lama.Jawaban:
Mengakui wawancara Anders Hejlsberg untuk Channel 9 tentang Pemrograman Asynchronous
async/await
dalam C # mengambil inspirasi pada async worflows di F #.Jika Anda tidak tahu, Anders Hejlsberg adalah arsitek utama C #, dan juga telah bekerja dalam bahasa lain termasuk TypeScript.
Menurut Don Syme, di blognya , alur kerja F # async mengambil inspirasi dari implementasi asynchronous monad untuk haskell. Terutama kertas Peng Li dan kertas Koen Claessen "A Poor Man's Concurrency Monad" .
Jika Anda tidak tahu, Don Syme adalah arsitek utama F #, antara lain.
Makalah Koen Claessen adalah implementasi operasi yang lebih tua dengan hasil dan kelanjutan yang dapat saya temukan, berasal dari tahun 1999. Makalah ini mengimplementasikan konkurensi dengan mendefinisikan operasi atom, kelanjutan, dan penjadwal bundar. Pendekatan monaid akan menjadi motivasi untuk beralih dari pesan lewat ke hasil menunggu.
Pekerjaan sebelumnya untuk konkurensi di Haskell menggunakan beberapa bentuk saluran atau pesan yang lewat untuk komunikasi.
Berbicara tentang pekerjaan sebelumnya, saya harus menyebutkan Concurrent Haskell, dimana "A Poor Man's Concurrency Monad" adalah alternatif ...
Dan makalah "Pemrograman Paralel Implisit dan Eksplisit di Haskell" oleh Mark P. Jones dan Paul Hudak. Makalah ini meletakkan dasar bagi kertas Koen Claessen.
Dalam makalah "Pemrograman Paralel Implisit dan Eksplisit di Haskell" Mark dan Paul menganalisis sifat-sifat "garpu" dan masalah efek samping dalam konkurensi, antara lain. Mereka merujuk pada makalah "A semantik untuk primitif konkurensi ML" yang mengambil satu set primitif konkuren berdasarkan pada Concurrent ML dan memberikan bukti bahwa mereka mempertahankan properti eksekusi berurutan.
sumber
Saya percaya bahwa Microsoft tidak akan mengambil kata-kata yang sudah ada, jadi kata-kata
async
danawait
dapat dikaitkan dengan waktu yang Anda rujuk. Namun, ide-ide Coroutines dan Cooperative multitasking sudah sangat tua.sumber