/* Ċ Ġ* Ġ Ġ< h 1 > License Ġ:</ h 1 > Ġ< br /> Ċ Ġ* ĠThe Ġfollowing Ġcode Ġis Ġdeliver Ġas Ġis . Ġ< br /> Ċ Ġ* Ġ ĠYou Ġcan Ġuse , Ġmodify , Ġthe Ġcode Ġas Ġyour Ġneed Ġfor Ġany Ġusage .< br /> Ċ Ġ* Ġ ĠBut Ġyou Ġcan 't Ġdo Ġany Ġaction Ġthat Ġavoid Ġme Ġor Ġother Ġperson Ġuse , Ġmodify Ġthis Ġcode .< br /> Ċ Ġ* Ġ ĠThe Ġcode Ġis Ġfree Ġfor Ġusage Ġand Ġmodification , Ġyou Ġcan 't Ġchange Ġthat Ġfact . Ċ Ġ*/ Ċ Ċ package Ġfr . j help . tasks . chain Ċ Ċ import Ġfr . j help . tasks . launch Ċ import Ġfr . j help . tasks . promise . Future Result Ċ import Ġfr . j help . tasks . promise . Promise Ċ Ċ /** Ċ Ġ* ĠValue Ġemitter . Ċ Ġ* Ċ Ġ* ĠAn Ġemitter Ġprovides Ġa Ġflow Ġof Ġelements . ĠThey Ġmay Ġproduce Ġelements Ġan Ġinfinite Ġnumber Ġof Ġtimes Ċ Ġ*/ Ċ abstract Ġclass ĠEmit ter < T Ġ: ĠAny > Ċ { ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvide Ġthe Ġnext Ġelement ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠNext Ġelement Ġor Ġ` null ` Ġif Ġthere Ġno Ġmore Ġelements ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġnext (): ĠT ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEm mit , Ġin Ġindependent Ġenvironment , Ġvalues Ġto Ġa Ġtask Ġchain ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠFuture Ġto Ġbe Ġable Ġreact Ġwhen Ġemit Ġis Ġfinished Ġ( No Ġmore Ġelements Ġto Ġemit ). ĊĠĠĠĠ Ġ* ĠOr Ġto Ġcancel Ġthe Ġemit Ġ( Use ful Ġon Ġinfinite Ġemitter ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< R Ġ: ĠAny > Ġemit ( task Chain : ĠTask Chain < T , ĠR >): ĠFuture Result < Unit > ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpromise Ġ= ĠPromise < Unit >() ĊĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġthis . next () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( value Ġ!= Ġnull Ġ&& Ġ! promise . c anceled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Chain . emit ( value ). wait Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġthis . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpromise . result ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpromise . register Ġ{ Ġreason Ġ-> Ġfuture . cancel ( reason ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpromise . future ĊĠĠĠ Ġ} Ċ }