لغو
کنار گذاشتن future به این معنی است که دیگر هرگز نمیتوان آن را poll کرد. به این حالت cancellation میگویند و میتواند در هر نقطه await
رخ دهد. برای اطمینان از عملکرد صحیح سیستم حتی در صورت لغو futureها، دقت مناسب لازم است. بهعنوان مثال، نباید دادهها را از دست بدهد یا به بنبست (deadlock) برسد.
Speaker Notes
This slide should take about 18 minutes.
-
کامپایلر در مورد cancellation-safety کمکی نمیکند. باید مستندات API را بخوانید و در نظر بگیرید که
async fn
شما چه وضعیتی دارد. -
برخلاف
panic
و?
، لغو یا cancellation بخشی از جریان کنترل عادی (و رسیدگی به خطا) است. -
اسن مثال بخشهایی از string را از دست میدهد.
-
هر زمان که شاخه
tick()
اول تمام شود،next()
وbuf
آن حذف می شوند. -
LinesReader
را میتوان با تبدیلbuf
به بخشی از ساختار، ایمن کرد:
-
-
‘Interval::tick’ برای cancellation-safe است زیرا ردیابی میکند که آیا یک tick تحویل داده شده است.
-
AsyncReadExt::read
برای cancellation-safe است زیرا دادهها را برمیگرداند یا نمیخواند. -
AsyncBufReadExt::read_line
مشابه مثال است و شبیه cancellation-safe نیست. برای جزئیات و موارد جایگزین به مستندات آن مراجعه کنید.