Open1
tokioとか
この章なんだけど、クライアントを複数のtokioランタイム上のグリーンスレッドに投げていてコンパイルエラーが起きる例が示されている。
結局チャネルを使うんだが、意味はないが無理やり共有する場合、クライアント側をMutexでロックをかける方法になる。
client::set は &mut self をとっています。つまり、これを呼び出すためには、排他制御が必要だということです。タスクごとにコネクションを開くことも可能ではありますが、理想的ではありません。
これは分かる。よくあるコネクションの使い回しの話。
std::sync::Mutex を使うという考えもありますが、ロックを保持した状態で .await する必要があるので、これもだめです。
これがピンと来ていない。。
tokio::sync::Mutex を使ったとしても、同時にさばけるリクエストは1つだけなので、微妙です。
これはclinetの所有権的な問題で片方のスレッドでしか動作しないからというイメージでなんとなくイメージは掴める。