async-drop
Asynchroniczne czyszczenie zasobów w Rust — bezpieczne zamykanie połączeń i plików
Instalacja
Wybierz klienta i sklonuj repozytorium do odpowiedniego katalogu skilli.
Instalacja
O skillu
AsyncDrop to wzorzec projektowy dla Rusta, który umożliwia asynchroniczne czyszczenie zasobów wymagających asynchronicznego zamknięcia — połączeń sieciowych, uchwytów plików czy zadań w tle. Zamiast synchronicznego Drop, używasz AsyncDropGuard i jawnie wywołujesz async_drop().await, co gwarantuje prawidłowe zwolnienie zasobów. Skill zawiera kompletny przewodnik po implementacji AsyncDrop trait, zasadach użycia oraz makrze with_async_drop_2!, który automatycznie obsługuje czyszczenie przy wyjściu ze scope'u.
Jak używać
Zainstaluj skill async-drop z repozytorium cryfs w swoim projekcie Rust. Skill zawiera pełny przewodnik wzorca AsyncDrop wraz z przykładami kodu.
Gdy twój typ przechowuje zasoby wymagające asynchronicznego zamknięcia (np. połączenie sieciowe, plik, zadanie w tle), zamiast polegać na synchronicznym Drop, zaimplementuj AsyncDrop trait z metodą async_drop_impl(&mut self) -> Result<(), Self::Error>.
W funkcjach zwracających ten typ użyj AsyncDropGuard
jako wrappera. Typ będzie dostępny przez Deref, ale wymaga jawnego wywołania async_drop().await przed upuszczeniem. Dla automatycznego czyszczenia na wyjściu ze scope'u użyj makra with_async_drop_2!. Otocz kod zasobu tym makrem — automatycznie wywoła async_drop() przy zakończeniu bloku, niezależnie od wyniku.
Pamiętaj o kluczowych zasadach: zawsze wywołuj async_drop() na AsyncDropGuard (chyba że dojdzie do paniki), fabryki powinny zwracać guardy zamiast zwykłych wartości, a typy zawierające guardy powinny delegować do ich async_drops w swojej implementacji AsyncDrop.
Zapoznaj się z dokumentacją patterns.md i gotchas.md w skill'u, aby poznać typowe błędy i zaawansowane wzorce implementacji.