— Salom, Amigo! Mana bir qiziqarli savol, bu bilan sen allaqachon duch kelgansan yoki yaqin kelajakda duch kelasan. A qanday qilib ishga tushirilgan oqimni to'xtatish mumkin?
Foydalanuvchi dasturni "internetdan fayl yuklab olish" buyrug'ini berdi, deylik. Asosiy oqim bu vazifa uchun alohida chaqiriq oqimini yaratdi va unga obyektni berdi, uning run metodi faylni yuklab olish uchun zarur bo'lgan barcha harakatlarni o'z ichiga oladi.
A bu yerda foydalanuvchi - bir marta va o'ylab qoldi. U bu faylni yuklab olmoqchi emas. Vazifani qanday bekor qilish va oqimni to'xtatish mumkin?
— Ha, qanday?
— Hech qanday. Bu eng umumiy va eng to'g'ri javob. Oqimni to'xtatib bo'lmaydi, u faqat o'zi to'xtashi mumkin.
Lekin oqimga signal berib, unga biror usulda xabar berishingiz mumkin, endi ish bajarilishi kerak emasligini va uni tugatish kerakligini. Xuddi asosiy oqim main metodidan chiqish bilan birga tugaganidek, chaqiriq oqimini tugatish uchun u run metodini bajarishni tugatishi kerak.
— Va buni eng yaxshi qanday qilish mumkin?
— Siz biror bir o'zgaruvchi, masalan, boolean turidagi o'zgaruvchini yaratishingiz mumkin. Agar u true bo'lsa – oqim ishlaydi. Agar u false bo'lsa – oqim tugashi kerak. Masalan, shunday:
| Kod | Tavsif |
|---|---|
|
Clock (soat) klassi har bir soniyada konsolda "Tik" so'zini abadiy yozadi Agar ClockManager.isClockRun o'zgaruvchisi false bo'lsa – run metodi tugaydi. |
|
Asosiy oqim, soatlarni – abadiy ishlashi kerak bo'lgan chaqiriq oqimini ishga tushiradi. 10 soniya kutadi va soatlarni tugatish uchun signal beradi. Asosiy oqim o'z ishini tugatadi. Soatlar oqimi o'z ishini tugatadi. |
— Agar bizda bir nechta oqim bo'lsa, u holda nima?
— Unda har bir oqim uchun shunday o'zgaruvchi yaratish yaxshiroqdir. Uni klassga qo'shish eng qulay usuldir. Bu yerda boolean isRun o'zgaruvchini qo'shish mumkin. Lekin boolean isCancel o'zgaruvchini qo'shish yaxshiroq, bu topshiriq bekor qilinganida true qiymatini oladi.
| Kod | Tavsif |
|---|---|
|
Clock (soat) klassi har bir soniyada konsolda "Tik" so'zini yozadi, isCancel o'zgaruvchisi false bo'lsa. isCancel o'zgaruvchisi true bo'lganda, run metodi tugaydi. |
|
Asosiy oqim, soatlarni – abadiy ishlashi kerak bo'lgan chaqiriq oqimini ishga tushiradi. 10 soniya kutadi va cancel metodini chaqirib, topshiriqni bekor qiladi. Asosiy oqim o'z ishini tugatadi. Soatlar oqimi o'z ishini tugatadi. |
— Bilishga yaxshi, rahmat, Elli.
GO TO FULL VERSION