Asynchronous Programming in Rust
from B Hello, Client
Asynchronous Programming in Rust
Rust では、async fnがfutureを返す非同期関数を作ってくれます。
ほう、JavascriptでいうPromiseかな?
async fn内では.awaitを使うことで、ほかのFutureトレイトを実装する別の型の完了を待つことができます。
なるほど、ここら辺はJavaScriptって結構同じだな
code:rs
// 両方のfutureを同時に完了するまで実行します。
join!(future_one, future_two);
C++でいうthread::join()、JavaScriptでいうPromise::all()か
https://cpprefjp.github.io/reference/thread/thread/join.html
https://async-book-ja.netlify.app/01_getting_started/04_async_await_primer#async--await-入門
code:rs
let song = learn_song().await;
JavaScriptでは前にawaitをつけるけど、こっちだとメソッド風の書き方を取るんだな
これは言語機能...なのかな?
https://async-book-ja.netlify.app/02_execution/02_future
futureの中身について
このpoll関数を呼び出すことでFutureを進めることが出来ます、これにより、Futureが可能な限り完了するようになります。Futureが完了するとPoll::Ready(result)を返し、未完了のときはPoll::Pendingを返して、Futureがさらに進む準備ができたときにwake()関数が呼び出されるように準備します。
poll関数が毎フレーム実行されるupdateに近い
OpenSiv3DでいうEffectのプログラミングに近いな
Ready, Pendingの立ち位置もPromiseに似ている。
待機 (pending): 初期状態。成功も失敗もしていません。
履行 (fulfilled): 処理が成功して完了したことを意味します。
拒否 (rejected): 処理が失敗したことを意味します。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise#解説
#参考資料