package Ġcom . github . r ws bil ly ang . app base . ap ire sponse Ċ Ċ import Ġkotlinx . coroutines .* Ċ Ċ // https :// github . com / sh ks ch ne ider / android _ view model _ li ved ata _ coroutines / blob / master / app / src / main / kotlin / me / sh ks ch ne ider / view model li ved at ac or outines / Cor outines . kt Ċ object ĠCor outines Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRoom ä¼ļ è¦ģæ±Ĥ åľ¨ æĸ° çº¿ç¨ĭ ä¸Ń è¿Ľè¡Į åŃĺåĤ¨ æĵįä½ľ ï¼Į createNew Thread éľĢ è®¾ç½®ä¸º true ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġio ( createNew Thread : ĠBoolean Ġ= Ġfalse , work : Ġsuspend Ġ(() Ġ-> ĠT ? )): ĠJob Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( createNew Thread ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch ( new Single Thread Context (" io ")) Ġ{ Ġwork ()} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ Ġwork ()} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġ< T : ĠAny > Ġio Then Main ( work : Ġsuspend Ġ(() Ġ-> ĠT ), Ġcallback : Ġ(( T ) Ġ-> ĠUnit )? Ġ= Ġnull ): ĠJob Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async Ġwork () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġ< T : ĠAny > Ġio Then Main 2 ( work : Ġsuspend Ġ(() Ġ-> ĠT ? ), Ġcallback : Ġ(( T ?) Ġ-> ĠUnit )? Ġ= Ġnull ): ĠJob Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async Ġwork () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ }