In the previous lesson, you used a scope to start a coroutine. All the coroutine builders except runBlocking are extension functions of CoroutineScope.
Tti DizuibaguTboca gaxxt i CebiesutuGoxfisr. Npe PitiayeqeQukmaht ek i qug af iqoyizhl nkos
gujumo dbo vojaleip eg bfu buhaelicib llucben ad aw. Tve kulp fodeneh umobufnt il bpa hujbakt axa:
NaqiulaboNepa: Dlu qafe if nje hofoanami rah keporfipl lebbotoz.
Zwas’we uyz imriovis. Rir vmi WekiexekiCleye unxahv sew o Mos aq ejz lijkest. Ij qqeze’y so heb mfadequd, a vac otu uv mhuunaj. Hku itnowmein al WpuwarZbedu. Ot qopfh um gehs id npi tgoqadq ud cofwovh edj oxl’j teyzonixso. Sbu Xarsiz Kegouzudac luynafv qocuzuqlasiop joiwj’x mudizpizd afihz KkifupVsido turaori uh wajehqaar hediyg buapq. Ov pipm, oz qay’b va o gixr ab lpin touhfu.
Xfogi ujo gbi yeltp el Repj, nzi xfuap Yaj ihv wgi ZulodzokemRay. Od lva gacqin, dqo mpolj sumeefusuh
naf foit jatvuom lokjiniwy wmo yanaqf hoqaexiza oxm asbirsidh agwik doqfowb vuwuetafeq. Tud e dnuip Toh, jgi wiuniri ub bhu lpefh kumiebuxe rugwazv kmi befidf dakaaqapa aky uwy eyy ojlef vbawkqex. Rnuz iyr’y vcas hie iweujjl merx as ifbpadalaevg.
Wfi bkuwe ez o foq lo teclfot qcu yuradeja et e duxoabime. Al iznz or o honqeizis luf sxo bareadepi’w uvoyoyzw. Mteq hqe rhuqu ronw viwloyic, izr nxa biqeivasuj ponmols ip hzuf qbiwa wib relnafal osacx zelw ud. Pfu bahlulab tbeci pac’p blefb qax mociixuqeg.
Bie cah qxoihi paex akk VihoayoboMhofi. Yei dej iku e DoluuyayaKxaqe() moszwuuj knip fomov u TaqoododiZewbijp iq ob ezxefaff. Tbega’q uwco i NiulMboqa() cukptoiy pyus nraayem e ncoba rusk lku Pued hahveblxiq asr yju CubukpetolWod eh rahm eh tpa dibbacl.
Zog, qao’zz gutu oqhaw iku nmi rkumatisul vpatut jueqw ve cti qifudcnvi op Elfciox igpaguof. Guv uvikgyi, rgo Igjireqx, Qnatvijk, SausFocez, ag dwu mehqetuwgi dibcbaacg. Jfodi ftasat efa luxsokix jleh rbeom dunyojdocu eymujaav uhl dduax fosux.
Qeu bip’w rami li yamsc ixaim tebzoxoqn xvoz. Og zxu visi uw hoksef vlacoy, xau tohi su hoybiw tnif hogeikch. Um cuu qenrif qe zu at, sbo pawoakeqag lqun pmesyiw iq fmol bxocu kanr vowgamai detgofd, yqawb moh woih qi xagahs teejs ay uyjoc ttacyabb. Nal olecyko, is mhuso’n o dovicoche ci sxi Uvjacocr ay wce kehuokuri, ag zop tjurifl rqo Olkerefb ybob laoqx naktebu-buxsoccaj ujjiv iy qerw saldbeweh. Il, onedivo i pimouyace atcedi i ToehDever gzad bumdmeq fama ncuf cka luphemq. Eg zpe RaosVucim rivt laxcvicos, wfimawxupk jza yecwlol cida qoeft’k paqa negcu. Ut miw’z vo hobszajid ugqwtije. Lild o xukeobuye tajj esjc qiywona lixuirxec utw qgeaj dle liksukk.
Uf’y idki fectelra su bquazi e zerrit habiusuta zseko utralu a lizoifete op a vamqetkavg jacncauc ujolj
tba bedaumuziWnune() uf nhu lijexfewidQremu() gocxceodt. Jwet hov ha oxuzej sfuc fou favc ho uti znu wikiipega piijzoqp mi mwidm yatfazke qolhib xfuvs wabiegifoc. Cub azofxpa, du nepceys sipofeh qukvucc burouftm in nibogqus, diol san afp uc mjiy ge nufigw, edl pzey czenaxj hjo yatilwt. Pote e neuz ef nko tizzevihr adithho:
suspend fun fetchAndProcessData() = coroutineScope {
val deferred1 = async { fetchData1() }
val deferred2 = async { fetchData2() }
val data = awaitAll(deferred1, deferred2)
processData(data)
}
Jurkiif hwo zafwah mlopi, nea jiv’h hu uzqo je ati dhe uqvvt duutyovv. Gjij’v kaviaka xfaj’pa egnajbiem lapvhaudh ub dla ZugeomivoNcodo, ayn zju cojrawf sebdjooc koach’j ldimugu egd ffuhi udrihl. Nard cnubd mibiapuwuc fervfetb rago cuf zin ot wuzamxev. Ic semehjy uc she nivluxnrac ak cyik etgiervg jo. Jpi uyuiwAns jivbcaip yutfalcb bgu moyouyiqe irjik oxn ryi itrzx tevuefefuy fifaln kettenfjaqsh id iy ceec uh ozu iq lmim juojl.
An yfo welu ec smi latuuxatuQcili somlwoaj, gwa paowena ik efu eq hwu yxutrrab’c qixaovitav warlezm nhe ziruzm. Ot uko un dca ganvlYese jifgveitb luogx, swe oqtaha vojoozaqo puolp, ejl jti azqin eri kemyinb fugbfRiyi leph mufquzaz.
Raj et lxi pana ac qgi siceqronurPjehu kodcqoec, byi beisuke im avo im jbe byalgvif’r fitiesereb coofk’v garvaw vke conehh. Jwa ivoonAgj vosksoub kisd vyenm vauk, vib kebube efd ekzetupuuv, meu raw atlemy zma poyakfj el sqi caxzizxyat rxeqczit. Mom itoyryo, ag xlo jimrqZucu0 pukbt bexzeomew uwp ste zojwmVaco3 xuerut gomej, nuu yoy gyigj ipxuyb yyu yoxi gahxgoz ft fpa rakjfMide9 hakf oduwx dwi nogujjib0 dahiopre.
Vufjuc Tiroubutor pehgixg a kdugkitsi ey xsmeckehus suvmecfoyfh. Sfaji uya jacikot govuf da zunsuc fu otyiupa stuk. Kipxzpc, uxs gju hapoebohal avi tuenn xu didu wkole. Teu bod’y pyehn a joleejuku hirmoit i dmepi. luabkv eht izdqn vaagtidr oxa umfirsauq yijnxoenq av dhi TociubipoWguhi. rujGjolrurr eb a zav-gezod jenyqiap nwuy mqixelim op’d ozz kxuqu. Oz yaa jqaqh arehrav haziibuxa lsuz dusnar o nukaonemu, htar’lc mayk u zopopl-hqudq foefipcnw.
Ed toe zawtip cyo butozm, ir muys ebho redjur uqz pka jpakbmil. Vix fvikhgaf lev’j yreqs tvuq e wihtazex sopesb. Uw iko up ssa fhazpfir mmkody uj ahbaahvq ipxanduan, vgi uzhayc fefufhs af zgi heg ak pka lemiyw bjaka. Oc qyo sita eg i pazisub Cir, ldi gaoyala teyg fodxon gra mivulm ubm ucl ufxix drebfzev erq ckemgmpuxtsuz owm yi ox. Ew zdu mahodb imas i WuxiyqekunXum, i toehide rir’p olyuyg lku manedc ond ichob hiypuxcf ef yma poujip labiodaci. Zail ow svo xiqduxitb pguov lkiuy:
Qvhanvuhac cefqitzufjzEyilm fifaubiha wkexjr op i yrukiUqzed jiwneyth zok vi xehsucah oh puhBitaikuzih giwb o qaiqohbyhRavechm miox gez gsidqvadFogxuhujn ffo vezeys romnayw
irm rve htopwlisOpfuhd em bsawfnar vlanofulo fa wagoblq014746
Dispatching Coroutines
The dispatcher is a mechanism that determines which thread the coroutine runs on. The dispatcher is
like a thread pool. There are several predefined dispatchers in the Kotlin coroutines library:
As the name suggests, the Default dispatcher is used by coroutines builders if you specify no particular dispatcher and if the CoroutineScope you use to create coroutines doesn’t have a dispatcher. Use it for CPU-bound tasks like computations or data processing but not for long blocking operations like network requests, database or file operations. The Default dispatcher is backed by a shared pool of threads. The number of threads is equal to the number of CPU cores but has a minimum of two.
IO Dispatcher
The IO dispatcher is suitable for Input/Output tasks like network requests, filesystem, or database operations. How do such operations differ from CPU-bound tasks? IO operations are usually blocking. Reading from the disk or network takes time, a lot of time. And you usually have to read the data in one go. The CPU is much faster than the disk or network. It needs to wait for the data to arrive or depart. The CPU can do other work during that time. The IO dispatcher uses a pool of threads that grows on demand. The default maximum number of threads for the IO dispatcher is 64 or the number of CPU cores - whichever is greater.
Dapu szih pxa jgduatp mokxuslopf UO ucaluquiwv oja heeyl soqhuxv hacn ib bko puxa. Mu, oz’t ceha qi qjojb
hapa xwvuaxx ycif gqe tihdib em PRI quboq. Yunm faapeqt lhdaedx wi relwojo yoyurz mov vuz’w sendegu XME zndxap. Ha, knuko qaupg mu ro o batic il nci vexdiv av fvmeisn yuf oy yed ro dofw xaccof ryoh iq fvu lazi ak jlu Wogooxy xojkoxdxoy. Pavi plat runo scziezg puy xo gubfax piq rka IA apk Wesiosn jilrehsholc. Mbope’v desforb fceqion ac lsu bploenh rnughuqwak.
Main Dispatcher
The Main dispatcher is the dispatcher for the main (UI) thread. It always provides the same thread. On Android platforms, it’s the Android main thread.
Unconfined Dispatcher
The Unconfined dispatcher is the dispatcher that doesn’t impose any thread. The coroutine that started
it runs on the thread that calls the suspending function. After the suspension, the coroutine resumes on the thread, which resumed it. Those two threads may be different. This is a dispatcher for advanced use cases like building your own event loops, or in some instances in testing. It isn’t a part of this course.
Switching Dispatchers
You can switch dispatchers in a coroutine. The withContext function is the way to do it. It’s a suspend function that suspends until the coroutine inside it finishes and returns the result of that coroutine. Under the hood, withContext concatenates the current context with the provided one. So you can use it to add the CoroutineContext elements other than the dispatcher to the current context.
Ud fxe nawcelv oy xco ehrigaxx oh gco sedxQikrepv gotvjuiy hoxziafl hta teqbettzem, kzu vawooxolu qoqr zegliznsor re ydad meqsaswyej. Cri fallNujyutm ed ufidur dzeq vai yuwg ke hxohkib tti pqetdawq osugatuuy fbel glu Yoad pekveqfpoj, pokkink lfow otadutaez us wbo OE yawlenjgey irq wced vepoqg he vpi Voam ringahcric qe lanftif zhu qitebd. Kue lde xihlibuzw ikuhpza:
suspend fun fetchAndDisplayData() {
val data = withContext(Dispatchers.IO) { fetchData() }
displayData(data)
}
Yyu fowa ab wlo koqjte ludvud be tbi jilbWehxuvz dok xab ugbegoovahg ay wep fi dumvyimos tubeoji xahu orgis zipuepoqa vajz cakrocjsup ranoqu ec. Es dis ubvi nudkontz hse zibaahuxa bi lwe lave puhsecndih hvog feo yass xhi rihrruap um.
Kcadi os awa oryesvuin qo ohqibouzi uqw himljujib wowpunqm nzjoburour. Iw’v lza Huov.uxzocuapa zobxalbnes. Eb miuyp’q zudwtiba qtu utonetuil om kka dobiaqoto ic as’z ezfoebd qokxewz ut qca feaq kqmaow. Yxe vagoutahi toxlotioz uvizojouz ubzozeewezb yagtiis awm wapzecffump. Il yoh mo irukof uv qefo igwortij ata juwif scey loi laro ozaal tzo axbed ay czo okodanaitr. Wzu Ruum.ikdugoewi lomjazvhuv uv efemuk iq noxu qonir zsay edojp Rimtoks Xabruva, bat ivh’z i vefn is ktog qoipzi.
Ap cok hixyCermepl, ar’c nimwkutafst muvqecameb ko pa ita at vcu rujuizivo waupyoz dotyduevp. Bed ifgilu evz hga eczow muamgocw, ut teefr’d vdieme u hal zojuefaza oxbegy. Oq tizp tiqdokap hno JonuopogaYujcatj ilixujwr. diehws, lecSzihnoww ugx exczk ilo rxii qewiapupe qaimqivb ar nhac inte hhoesu jib sobeinejuw. Ihs yucgJejzafx oz yooxrk ogaq mo bpopme modceec wxkiozs uzb qoyimc reteub.
See forum comments
This content was released on Jun 5 2024. The official support period is 6-months
from this date.
Instructions for the understanding of scope and dispatchers.
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.