Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

破棄とクリーンアップ

  • オブジェクトの破棄と Drop の振り返り
  • ソフトウェアにおける一般的なクリーンアップ要件
  • async に関する問題
    • クリーンアップ中に非同期で何かを行いたい場合がある。例: 最後のメッセージを送信する
    • まだ非同期的に使用されているものをクリーンアップする必要がある場合がある
    • async タスクが完了またはキャンセルされ、それを捕捉する方法がない場合にクリーンアップしたい場合がある
    • クリーンアップフェーズ中のランタイムの状態(特にパニック中などの場合)
    • async Drop はない
      • 作業中
    • completion io トピックへの前方参照

キャンセル

  • どのように発生するか(more-async-await.md の振り返り)
    • future を drop する
    • キャンセルトークン
    • abort 関数
  • キャンセルを「捕捉」するために何ができるか
    • キャンセルのログ記録または監視
  • キャンセルが他の future タスクにどのように影響するか(キャンセル安全性の章への前方参照。ここでは注意喚起に留める)

パニックと async

  • タスク間でのパニックの伝播(spawn の結果)
  • パニックによりデータが不整合な状態で残ること(tokio のミューテックス)
  • パニック中に async コードを呼び出すこと(絶対に行わないようにする)

クリーンアップのパターン

  • クリーンアップが必要にならないようにする(abort/restart)
  • クリーンアップに async を使用せず、あまり心配しすぎない
  • async クリーンアップメソッド + dtor bomb(つまり、クリーンアップを破棄から分離する)
  • クリーンアップを別のタスク、スレッド、または supervisor オブジェクト/プロセスに集約/外部委託する
  • https://tokio.rs/tokio/topics/shutdown

なぜ async Drop がないのか(まだ)

  • これは高度なセクションであり、読む必要はないことに注意
  • async Drop が難しい理由
  • 考えられる解決策とその問題点
  • 現在の状況