Middle+
Корутинадарды жокко чыгара албай турган учурлар барбы?
sobes.tech AI
AIден жооп
ооба, бар.
Мындай учурлардын мисалдары:
- Корутин узак эсептөө ишин аткарып жатат, ал үзгүлтүксүз токтотуу текшерүүлөрү жок. Корутин
isActive-ти текшерет гана токтотуу (suspending) учурунда. Эгер иш токтотулбаса (мисалы, узун цикл же математикалык эсептөөлөр), ал токтотуу суранышын байкабайт. - Токтотуу исключениеси иштетилбейт (мисалы,
CancellationExceptionкармалбайт). Корутин аяктап калышы мүмкүн, бирок ата-корутин же тапшырма менеджери анын токтотулушун билбейт, жана ресурстар туура бошотулбай калышы мүмкүн. Dispatchers.Unconfinedже кооперативсиз диспетчерлерди колдонуу, мисалы, иштөө жиптеринин пулу бар диспетчер, ал Кооперативдүү Токтотууга колдоо көрсөтпөйт.CancellationExceptionдагы эле чыгарыла берет, бирок жүрүм-турум алдын ала айта албайт.- Блоктоочу кирүү/чыгуу операцияларын suspending функцияларга ороп колдонбоо (мисалы,
InputStream-ден окуу цикл ичинде,withContext(Dispatchers.IO)жана suspending ыкмаларын колдонбостон). Блоктоочу операция корутиндин абалын текшербейт жанаCancellationExceptionчыгарбайт.
Кооперативдүү токтотуу үчүн, корутин төмөнкүлөрдү жасашы керек:
Cooperative Cancellationколдоочу диспетчерди колдонуу (мисалы,Dispatchers.Default,Dispatchers.IO,Dispatchers.Main).- Регулярдуу түрдө
isActive-ти текшерүү же бул үчүн suspending функцияларды колдонуу. CancellationException-ти туура иштетүү.