1
0

Zip.Generated.cs 250 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System.Collections.Generic;
  5. using System.Reactive.Disposables;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. namespace System.Reactive.Linq
  9. {
  10. partial class AsyncObservable
  11. {
  12. public static IAsyncObservable<(T1, T2)> Zip<T1, T2>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2)
  13. {
  14. if (source1 == null)
  15. throw new ArgumentNullException(nameof(source1));
  16. if (source2 == null)
  17. throw new ArgumentNullException(nameof(source2));
  18. return Create<(T1, T2)>(async observer =>
  19. {
  20. var d = new CompositeAsyncDisposable();
  21. var (observer1, observer2) = AsyncObserver.Zip(observer);
  22. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  23. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  24. await Task.WhenAll(sub1, sub2).ConfigureAwait(false);
  25. return d;
  26. });
  27. }
  28. public static IAsyncObservable<TResult> Zip<T1, T2, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, Func<T1, T2, TResult> selector)
  29. {
  30. if (source1 == null)
  31. throw new ArgumentNullException(nameof(source1));
  32. if (source2 == null)
  33. throw new ArgumentNullException(nameof(source2));
  34. if (selector == null)
  35. throw new ArgumentNullException(nameof(selector));
  36. return Create<TResult>(async observer =>
  37. {
  38. var d = new CompositeAsyncDisposable();
  39. var (observer1, observer2) = AsyncObserver.Zip(observer, selector);
  40. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  41. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  42. await Task.WhenAll(sub1, sub2).ConfigureAwait(false);
  43. return d;
  44. });
  45. }
  46. public static IAsyncObservable<TResult> Zip<T1, T2, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, Func<T1, T2, Task<TResult>> selector)
  47. {
  48. if (source1 == null)
  49. throw new ArgumentNullException(nameof(source1));
  50. if (source2 == null)
  51. throw new ArgumentNullException(nameof(source2));
  52. if (selector == null)
  53. throw new ArgumentNullException(nameof(selector));
  54. return Create<TResult>(async observer =>
  55. {
  56. var d = new CompositeAsyncDisposable();
  57. var (observer1, observer2) = AsyncObserver.Zip(observer, selector);
  58. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  59. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  60. await Task.WhenAll(sub1, sub2).ConfigureAwait(false);
  61. return d;
  62. });
  63. }
  64. public static IAsyncObservable<(T1, T2, T3)> Zip<T1, T2, T3>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3)
  65. {
  66. if (source1 == null)
  67. throw new ArgumentNullException(nameof(source1));
  68. if (source2 == null)
  69. throw new ArgumentNullException(nameof(source2));
  70. if (source3 == null)
  71. throw new ArgumentNullException(nameof(source3));
  72. return Create<(T1, T2, T3)>(async observer =>
  73. {
  74. var d = new CompositeAsyncDisposable();
  75. var (observer1, observer2, observer3) = AsyncObserver.Zip(observer);
  76. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  77. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  78. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  79. await Task.WhenAll(sub1, sub2, sub3).ConfigureAwait(false);
  80. return d;
  81. });
  82. }
  83. public static IAsyncObservable<TResult> Zip<T1, T2, T3, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, Func<T1, T2, T3, TResult> selector)
  84. {
  85. if (source1 == null)
  86. throw new ArgumentNullException(nameof(source1));
  87. if (source2 == null)
  88. throw new ArgumentNullException(nameof(source2));
  89. if (source3 == null)
  90. throw new ArgumentNullException(nameof(source3));
  91. if (selector == null)
  92. throw new ArgumentNullException(nameof(selector));
  93. return Create<TResult>(async observer =>
  94. {
  95. var d = new CompositeAsyncDisposable();
  96. var (observer1, observer2, observer3) = AsyncObserver.Zip(observer, selector);
  97. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  98. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  99. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  100. await Task.WhenAll(sub1, sub2, sub3).ConfigureAwait(false);
  101. return d;
  102. });
  103. }
  104. public static IAsyncObservable<TResult> Zip<T1, T2, T3, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, Func<T1, T2, T3, Task<TResult>> selector)
  105. {
  106. if (source1 == null)
  107. throw new ArgumentNullException(nameof(source1));
  108. if (source2 == null)
  109. throw new ArgumentNullException(nameof(source2));
  110. if (source3 == null)
  111. throw new ArgumentNullException(nameof(source3));
  112. if (selector == null)
  113. throw new ArgumentNullException(nameof(selector));
  114. return Create<TResult>(async observer =>
  115. {
  116. var d = new CompositeAsyncDisposable();
  117. var (observer1, observer2, observer3) = AsyncObserver.Zip(observer, selector);
  118. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  119. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  120. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  121. await Task.WhenAll(sub1, sub2, sub3).ConfigureAwait(false);
  122. return d;
  123. });
  124. }
  125. public static IAsyncObservable<(T1, T2, T3, T4)> Zip<T1, T2, T3, T4>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4)
  126. {
  127. if (source1 == null)
  128. throw new ArgumentNullException(nameof(source1));
  129. if (source2 == null)
  130. throw new ArgumentNullException(nameof(source2));
  131. if (source3 == null)
  132. throw new ArgumentNullException(nameof(source3));
  133. if (source4 == null)
  134. throw new ArgumentNullException(nameof(source4));
  135. return Create<(T1, T2, T3, T4)>(async observer =>
  136. {
  137. var d = new CompositeAsyncDisposable();
  138. var (observer1, observer2, observer3, observer4) = AsyncObserver.Zip(observer);
  139. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  140. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  141. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  142. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  143. await Task.WhenAll(sub1, sub2, sub3, sub4).ConfigureAwait(false);
  144. return d;
  145. });
  146. }
  147. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, Func<T1, T2, T3, T4, TResult> selector)
  148. {
  149. if (source1 == null)
  150. throw new ArgumentNullException(nameof(source1));
  151. if (source2 == null)
  152. throw new ArgumentNullException(nameof(source2));
  153. if (source3 == null)
  154. throw new ArgumentNullException(nameof(source3));
  155. if (source4 == null)
  156. throw new ArgumentNullException(nameof(source4));
  157. if (selector == null)
  158. throw new ArgumentNullException(nameof(selector));
  159. return Create<TResult>(async observer =>
  160. {
  161. var d = new CompositeAsyncDisposable();
  162. var (observer1, observer2, observer3, observer4) = AsyncObserver.Zip(observer, selector);
  163. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  164. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  165. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  166. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  167. await Task.WhenAll(sub1, sub2, sub3, sub4).ConfigureAwait(false);
  168. return d;
  169. });
  170. }
  171. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, Func<T1, T2, T3, T4, Task<TResult>> selector)
  172. {
  173. if (source1 == null)
  174. throw new ArgumentNullException(nameof(source1));
  175. if (source2 == null)
  176. throw new ArgumentNullException(nameof(source2));
  177. if (source3 == null)
  178. throw new ArgumentNullException(nameof(source3));
  179. if (source4 == null)
  180. throw new ArgumentNullException(nameof(source4));
  181. if (selector == null)
  182. throw new ArgumentNullException(nameof(selector));
  183. return Create<TResult>(async observer =>
  184. {
  185. var d = new CompositeAsyncDisposable();
  186. var (observer1, observer2, observer3, observer4) = AsyncObserver.Zip(observer, selector);
  187. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  188. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  189. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  190. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  191. await Task.WhenAll(sub1, sub2, sub3, sub4).ConfigureAwait(false);
  192. return d;
  193. });
  194. }
  195. public static IAsyncObservable<(T1, T2, T3, T4, T5)> Zip<T1, T2, T3, T4, T5>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5)
  196. {
  197. if (source1 == null)
  198. throw new ArgumentNullException(nameof(source1));
  199. if (source2 == null)
  200. throw new ArgumentNullException(nameof(source2));
  201. if (source3 == null)
  202. throw new ArgumentNullException(nameof(source3));
  203. if (source4 == null)
  204. throw new ArgumentNullException(nameof(source4));
  205. if (source5 == null)
  206. throw new ArgumentNullException(nameof(source5));
  207. return Create<(T1, T2, T3, T4, T5)>(async observer =>
  208. {
  209. var d = new CompositeAsyncDisposable();
  210. var (observer1, observer2, observer3, observer4, observer5) = AsyncObserver.Zip(observer);
  211. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  212. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  213. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  214. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  215. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  216. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5).ConfigureAwait(false);
  217. return d;
  218. });
  219. }
  220. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, Func<T1, T2, T3, T4, T5, TResult> selector)
  221. {
  222. if (source1 == null)
  223. throw new ArgumentNullException(nameof(source1));
  224. if (source2 == null)
  225. throw new ArgumentNullException(nameof(source2));
  226. if (source3 == null)
  227. throw new ArgumentNullException(nameof(source3));
  228. if (source4 == null)
  229. throw new ArgumentNullException(nameof(source4));
  230. if (source5 == null)
  231. throw new ArgumentNullException(nameof(source5));
  232. if (selector == null)
  233. throw new ArgumentNullException(nameof(selector));
  234. return Create<TResult>(async observer =>
  235. {
  236. var d = new CompositeAsyncDisposable();
  237. var (observer1, observer2, observer3, observer4, observer5) = AsyncObserver.Zip(observer, selector);
  238. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  239. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  240. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  241. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  242. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  243. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5).ConfigureAwait(false);
  244. return d;
  245. });
  246. }
  247. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, Func<T1, T2, T3, T4, T5, Task<TResult>> selector)
  248. {
  249. if (source1 == null)
  250. throw new ArgumentNullException(nameof(source1));
  251. if (source2 == null)
  252. throw new ArgumentNullException(nameof(source2));
  253. if (source3 == null)
  254. throw new ArgumentNullException(nameof(source3));
  255. if (source4 == null)
  256. throw new ArgumentNullException(nameof(source4));
  257. if (source5 == null)
  258. throw new ArgumentNullException(nameof(source5));
  259. if (selector == null)
  260. throw new ArgumentNullException(nameof(selector));
  261. return Create<TResult>(async observer =>
  262. {
  263. var d = new CompositeAsyncDisposable();
  264. var (observer1, observer2, observer3, observer4, observer5) = AsyncObserver.Zip(observer, selector);
  265. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  266. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  267. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  268. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  269. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  270. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5).ConfigureAwait(false);
  271. return d;
  272. });
  273. }
  274. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6)> Zip<T1, T2, T3, T4, T5, T6>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6)
  275. {
  276. if (source1 == null)
  277. throw new ArgumentNullException(nameof(source1));
  278. if (source2 == null)
  279. throw new ArgumentNullException(nameof(source2));
  280. if (source3 == null)
  281. throw new ArgumentNullException(nameof(source3));
  282. if (source4 == null)
  283. throw new ArgumentNullException(nameof(source4));
  284. if (source5 == null)
  285. throw new ArgumentNullException(nameof(source5));
  286. if (source6 == null)
  287. throw new ArgumentNullException(nameof(source6));
  288. return Create<(T1, T2, T3, T4, T5, T6)>(async observer =>
  289. {
  290. var d = new CompositeAsyncDisposable();
  291. var (observer1, observer2, observer3, observer4, observer5, observer6) = AsyncObserver.Zip(observer);
  292. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  293. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  294. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  295. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  296. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  297. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  298. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6).ConfigureAwait(false);
  299. return d;
  300. });
  301. }
  302. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, Func<T1, T2, T3, T4, T5, T6, TResult> selector)
  303. {
  304. if (source1 == null)
  305. throw new ArgumentNullException(nameof(source1));
  306. if (source2 == null)
  307. throw new ArgumentNullException(nameof(source2));
  308. if (source3 == null)
  309. throw new ArgumentNullException(nameof(source3));
  310. if (source4 == null)
  311. throw new ArgumentNullException(nameof(source4));
  312. if (source5 == null)
  313. throw new ArgumentNullException(nameof(source5));
  314. if (source6 == null)
  315. throw new ArgumentNullException(nameof(source6));
  316. if (selector == null)
  317. throw new ArgumentNullException(nameof(selector));
  318. return Create<TResult>(async observer =>
  319. {
  320. var d = new CompositeAsyncDisposable();
  321. var (observer1, observer2, observer3, observer4, observer5, observer6) = AsyncObserver.Zip(observer, selector);
  322. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  323. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  324. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  325. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  326. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  327. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  328. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6).ConfigureAwait(false);
  329. return d;
  330. });
  331. }
  332. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, Func<T1, T2, T3, T4, T5, T6, Task<TResult>> selector)
  333. {
  334. if (source1 == null)
  335. throw new ArgumentNullException(nameof(source1));
  336. if (source2 == null)
  337. throw new ArgumentNullException(nameof(source2));
  338. if (source3 == null)
  339. throw new ArgumentNullException(nameof(source3));
  340. if (source4 == null)
  341. throw new ArgumentNullException(nameof(source4));
  342. if (source5 == null)
  343. throw new ArgumentNullException(nameof(source5));
  344. if (source6 == null)
  345. throw new ArgumentNullException(nameof(source6));
  346. if (selector == null)
  347. throw new ArgumentNullException(nameof(selector));
  348. return Create<TResult>(async observer =>
  349. {
  350. var d = new CompositeAsyncDisposable();
  351. var (observer1, observer2, observer3, observer4, observer5, observer6) = AsyncObserver.Zip(observer, selector);
  352. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  353. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  354. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  355. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  356. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  357. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  358. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6).ConfigureAwait(false);
  359. return d;
  360. });
  361. }
  362. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7)> Zip<T1, T2, T3, T4, T5, T6, T7>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7)
  363. {
  364. if (source1 == null)
  365. throw new ArgumentNullException(nameof(source1));
  366. if (source2 == null)
  367. throw new ArgumentNullException(nameof(source2));
  368. if (source3 == null)
  369. throw new ArgumentNullException(nameof(source3));
  370. if (source4 == null)
  371. throw new ArgumentNullException(nameof(source4));
  372. if (source5 == null)
  373. throw new ArgumentNullException(nameof(source5));
  374. if (source6 == null)
  375. throw new ArgumentNullException(nameof(source6));
  376. if (source7 == null)
  377. throw new ArgumentNullException(nameof(source7));
  378. return Create<(T1, T2, T3, T4, T5, T6, T7)>(async observer =>
  379. {
  380. var d = new CompositeAsyncDisposable();
  381. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7) = AsyncObserver.Zip(observer);
  382. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  383. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  384. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  385. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  386. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  387. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  388. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  389. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7).ConfigureAwait(false);
  390. return d;
  391. });
  392. }
  393. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, Func<T1, T2, T3, T4, T5, T6, T7, TResult> selector)
  394. {
  395. if (source1 == null)
  396. throw new ArgumentNullException(nameof(source1));
  397. if (source2 == null)
  398. throw new ArgumentNullException(nameof(source2));
  399. if (source3 == null)
  400. throw new ArgumentNullException(nameof(source3));
  401. if (source4 == null)
  402. throw new ArgumentNullException(nameof(source4));
  403. if (source5 == null)
  404. throw new ArgumentNullException(nameof(source5));
  405. if (source6 == null)
  406. throw new ArgumentNullException(nameof(source6));
  407. if (source7 == null)
  408. throw new ArgumentNullException(nameof(source7));
  409. if (selector == null)
  410. throw new ArgumentNullException(nameof(selector));
  411. return Create<TResult>(async observer =>
  412. {
  413. var d = new CompositeAsyncDisposable();
  414. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7) = AsyncObserver.Zip(observer, selector);
  415. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  416. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  417. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  418. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  419. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  420. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  421. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  422. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7).ConfigureAwait(false);
  423. return d;
  424. });
  425. }
  426. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, Func<T1, T2, T3, T4, T5, T6, T7, Task<TResult>> selector)
  427. {
  428. if (source1 == null)
  429. throw new ArgumentNullException(nameof(source1));
  430. if (source2 == null)
  431. throw new ArgumentNullException(nameof(source2));
  432. if (source3 == null)
  433. throw new ArgumentNullException(nameof(source3));
  434. if (source4 == null)
  435. throw new ArgumentNullException(nameof(source4));
  436. if (source5 == null)
  437. throw new ArgumentNullException(nameof(source5));
  438. if (source6 == null)
  439. throw new ArgumentNullException(nameof(source6));
  440. if (source7 == null)
  441. throw new ArgumentNullException(nameof(source7));
  442. if (selector == null)
  443. throw new ArgumentNullException(nameof(selector));
  444. return Create<TResult>(async observer =>
  445. {
  446. var d = new CompositeAsyncDisposable();
  447. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7) = AsyncObserver.Zip(observer, selector);
  448. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  449. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  450. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  451. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  452. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  453. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  454. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  455. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7).ConfigureAwait(false);
  456. return d;
  457. });
  458. }
  459. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7, T8)> Zip<T1, T2, T3, T4, T5, T6, T7, T8>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8)
  460. {
  461. if (source1 == null)
  462. throw new ArgumentNullException(nameof(source1));
  463. if (source2 == null)
  464. throw new ArgumentNullException(nameof(source2));
  465. if (source3 == null)
  466. throw new ArgumentNullException(nameof(source3));
  467. if (source4 == null)
  468. throw new ArgumentNullException(nameof(source4));
  469. if (source5 == null)
  470. throw new ArgumentNullException(nameof(source5));
  471. if (source6 == null)
  472. throw new ArgumentNullException(nameof(source6));
  473. if (source7 == null)
  474. throw new ArgumentNullException(nameof(source7));
  475. if (source8 == null)
  476. throw new ArgumentNullException(nameof(source8));
  477. return Create<(T1, T2, T3, T4, T5, T6, T7, T8)>(async observer =>
  478. {
  479. var d = new CompositeAsyncDisposable();
  480. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8) = AsyncObserver.Zip(observer);
  481. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  482. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  483. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  484. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  485. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  486. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  487. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  488. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  489. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8).ConfigureAwait(false);
  490. return d;
  491. });
  492. }
  493. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> selector)
  494. {
  495. if (source1 == null)
  496. throw new ArgumentNullException(nameof(source1));
  497. if (source2 == null)
  498. throw new ArgumentNullException(nameof(source2));
  499. if (source3 == null)
  500. throw new ArgumentNullException(nameof(source3));
  501. if (source4 == null)
  502. throw new ArgumentNullException(nameof(source4));
  503. if (source5 == null)
  504. throw new ArgumentNullException(nameof(source5));
  505. if (source6 == null)
  506. throw new ArgumentNullException(nameof(source6));
  507. if (source7 == null)
  508. throw new ArgumentNullException(nameof(source7));
  509. if (source8 == null)
  510. throw new ArgumentNullException(nameof(source8));
  511. if (selector == null)
  512. throw new ArgumentNullException(nameof(selector));
  513. return Create<TResult>(async observer =>
  514. {
  515. var d = new CompositeAsyncDisposable();
  516. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8) = AsyncObserver.Zip(observer, selector);
  517. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  518. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  519. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  520. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  521. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  522. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  523. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  524. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  525. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8).ConfigureAwait(false);
  526. return d;
  527. });
  528. }
  529. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, Func<T1, T2, T3, T4, T5, T6, T7, T8, Task<TResult>> selector)
  530. {
  531. if (source1 == null)
  532. throw new ArgumentNullException(nameof(source1));
  533. if (source2 == null)
  534. throw new ArgumentNullException(nameof(source2));
  535. if (source3 == null)
  536. throw new ArgumentNullException(nameof(source3));
  537. if (source4 == null)
  538. throw new ArgumentNullException(nameof(source4));
  539. if (source5 == null)
  540. throw new ArgumentNullException(nameof(source5));
  541. if (source6 == null)
  542. throw new ArgumentNullException(nameof(source6));
  543. if (source7 == null)
  544. throw new ArgumentNullException(nameof(source7));
  545. if (source8 == null)
  546. throw new ArgumentNullException(nameof(source8));
  547. if (selector == null)
  548. throw new ArgumentNullException(nameof(selector));
  549. return Create<TResult>(async observer =>
  550. {
  551. var d = new CompositeAsyncDisposable();
  552. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8) = AsyncObserver.Zip(observer, selector);
  553. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  554. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  555. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  556. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  557. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  558. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  559. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  560. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  561. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8).ConfigureAwait(false);
  562. return d;
  563. });
  564. }
  565. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7, T8, T9)> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9)
  566. {
  567. if (source1 == null)
  568. throw new ArgumentNullException(nameof(source1));
  569. if (source2 == null)
  570. throw new ArgumentNullException(nameof(source2));
  571. if (source3 == null)
  572. throw new ArgumentNullException(nameof(source3));
  573. if (source4 == null)
  574. throw new ArgumentNullException(nameof(source4));
  575. if (source5 == null)
  576. throw new ArgumentNullException(nameof(source5));
  577. if (source6 == null)
  578. throw new ArgumentNullException(nameof(source6));
  579. if (source7 == null)
  580. throw new ArgumentNullException(nameof(source7));
  581. if (source8 == null)
  582. throw new ArgumentNullException(nameof(source8));
  583. if (source9 == null)
  584. throw new ArgumentNullException(nameof(source9));
  585. return Create<(T1, T2, T3, T4, T5, T6, T7, T8, T9)>(async observer =>
  586. {
  587. var d = new CompositeAsyncDisposable();
  588. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9) = AsyncObserver.Zip(observer);
  589. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  590. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  591. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  592. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  593. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  594. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  595. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  596. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  597. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  598. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9).ConfigureAwait(false);
  599. return d;
  600. });
  601. }
  602. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> selector)
  603. {
  604. if (source1 == null)
  605. throw new ArgumentNullException(nameof(source1));
  606. if (source2 == null)
  607. throw new ArgumentNullException(nameof(source2));
  608. if (source3 == null)
  609. throw new ArgumentNullException(nameof(source3));
  610. if (source4 == null)
  611. throw new ArgumentNullException(nameof(source4));
  612. if (source5 == null)
  613. throw new ArgumentNullException(nameof(source5));
  614. if (source6 == null)
  615. throw new ArgumentNullException(nameof(source6));
  616. if (source7 == null)
  617. throw new ArgumentNullException(nameof(source7));
  618. if (source8 == null)
  619. throw new ArgumentNullException(nameof(source8));
  620. if (source9 == null)
  621. throw new ArgumentNullException(nameof(source9));
  622. if (selector == null)
  623. throw new ArgumentNullException(nameof(selector));
  624. return Create<TResult>(async observer =>
  625. {
  626. var d = new CompositeAsyncDisposable();
  627. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9) = AsyncObserver.Zip(observer, selector);
  628. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  629. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  630. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  631. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  632. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  633. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  634. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  635. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  636. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  637. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9).ConfigureAwait(false);
  638. return d;
  639. });
  640. }
  641. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, Task<TResult>> selector)
  642. {
  643. if (source1 == null)
  644. throw new ArgumentNullException(nameof(source1));
  645. if (source2 == null)
  646. throw new ArgumentNullException(nameof(source2));
  647. if (source3 == null)
  648. throw new ArgumentNullException(nameof(source3));
  649. if (source4 == null)
  650. throw new ArgumentNullException(nameof(source4));
  651. if (source5 == null)
  652. throw new ArgumentNullException(nameof(source5));
  653. if (source6 == null)
  654. throw new ArgumentNullException(nameof(source6));
  655. if (source7 == null)
  656. throw new ArgumentNullException(nameof(source7));
  657. if (source8 == null)
  658. throw new ArgumentNullException(nameof(source8));
  659. if (source9 == null)
  660. throw new ArgumentNullException(nameof(source9));
  661. if (selector == null)
  662. throw new ArgumentNullException(nameof(selector));
  663. return Create<TResult>(async observer =>
  664. {
  665. var d = new CompositeAsyncDisposable();
  666. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9) = AsyncObserver.Zip(observer, selector);
  667. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  668. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  669. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  670. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  671. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  672. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  673. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  674. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  675. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  676. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9).ConfigureAwait(false);
  677. return d;
  678. });
  679. }
  680. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10)
  681. {
  682. if (source1 == null)
  683. throw new ArgumentNullException(nameof(source1));
  684. if (source2 == null)
  685. throw new ArgumentNullException(nameof(source2));
  686. if (source3 == null)
  687. throw new ArgumentNullException(nameof(source3));
  688. if (source4 == null)
  689. throw new ArgumentNullException(nameof(source4));
  690. if (source5 == null)
  691. throw new ArgumentNullException(nameof(source5));
  692. if (source6 == null)
  693. throw new ArgumentNullException(nameof(source6));
  694. if (source7 == null)
  695. throw new ArgumentNullException(nameof(source7));
  696. if (source8 == null)
  697. throw new ArgumentNullException(nameof(source8));
  698. if (source9 == null)
  699. throw new ArgumentNullException(nameof(source9));
  700. if (source10 == null)
  701. throw new ArgumentNullException(nameof(source10));
  702. return Create<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>(async observer =>
  703. {
  704. var d = new CompositeAsyncDisposable();
  705. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10) = AsyncObserver.Zip(observer);
  706. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  707. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  708. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  709. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  710. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  711. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  712. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  713. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  714. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  715. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  716. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10).ConfigureAwait(false);
  717. return d;
  718. });
  719. }
  720. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> selector)
  721. {
  722. if (source1 == null)
  723. throw new ArgumentNullException(nameof(source1));
  724. if (source2 == null)
  725. throw new ArgumentNullException(nameof(source2));
  726. if (source3 == null)
  727. throw new ArgumentNullException(nameof(source3));
  728. if (source4 == null)
  729. throw new ArgumentNullException(nameof(source4));
  730. if (source5 == null)
  731. throw new ArgumentNullException(nameof(source5));
  732. if (source6 == null)
  733. throw new ArgumentNullException(nameof(source6));
  734. if (source7 == null)
  735. throw new ArgumentNullException(nameof(source7));
  736. if (source8 == null)
  737. throw new ArgumentNullException(nameof(source8));
  738. if (source9 == null)
  739. throw new ArgumentNullException(nameof(source9));
  740. if (source10 == null)
  741. throw new ArgumentNullException(nameof(source10));
  742. if (selector == null)
  743. throw new ArgumentNullException(nameof(selector));
  744. return Create<TResult>(async observer =>
  745. {
  746. var d = new CompositeAsyncDisposable();
  747. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10) = AsyncObserver.Zip(observer, selector);
  748. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  749. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  750. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  751. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  752. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  753. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  754. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  755. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  756. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  757. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  758. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10).ConfigureAwait(false);
  759. return d;
  760. });
  761. }
  762. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, Task<TResult>> selector)
  763. {
  764. if (source1 == null)
  765. throw new ArgumentNullException(nameof(source1));
  766. if (source2 == null)
  767. throw new ArgumentNullException(nameof(source2));
  768. if (source3 == null)
  769. throw new ArgumentNullException(nameof(source3));
  770. if (source4 == null)
  771. throw new ArgumentNullException(nameof(source4));
  772. if (source5 == null)
  773. throw new ArgumentNullException(nameof(source5));
  774. if (source6 == null)
  775. throw new ArgumentNullException(nameof(source6));
  776. if (source7 == null)
  777. throw new ArgumentNullException(nameof(source7));
  778. if (source8 == null)
  779. throw new ArgumentNullException(nameof(source8));
  780. if (source9 == null)
  781. throw new ArgumentNullException(nameof(source9));
  782. if (source10 == null)
  783. throw new ArgumentNullException(nameof(source10));
  784. if (selector == null)
  785. throw new ArgumentNullException(nameof(selector));
  786. return Create<TResult>(async observer =>
  787. {
  788. var d = new CompositeAsyncDisposable();
  789. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10) = AsyncObserver.Zip(observer, selector);
  790. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  791. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  792. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  793. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  794. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  795. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  796. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  797. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  798. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  799. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  800. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10).ConfigureAwait(false);
  801. return d;
  802. });
  803. }
  804. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11)
  805. {
  806. if (source1 == null)
  807. throw new ArgumentNullException(nameof(source1));
  808. if (source2 == null)
  809. throw new ArgumentNullException(nameof(source2));
  810. if (source3 == null)
  811. throw new ArgumentNullException(nameof(source3));
  812. if (source4 == null)
  813. throw new ArgumentNullException(nameof(source4));
  814. if (source5 == null)
  815. throw new ArgumentNullException(nameof(source5));
  816. if (source6 == null)
  817. throw new ArgumentNullException(nameof(source6));
  818. if (source7 == null)
  819. throw new ArgumentNullException(nameof(source7));
  820. if (source8 == null)
  821. throw new ArgumentNullException(nameof(source8));
  822. if (source9 == null)
  823. throw new ArgumentNullException(nameof(source9));
  824. if (source10 == null)
  825. throw new ArgumentNullException(nameof(source10));
  826. if (source11 == null)
  827. throw new ArgumentNullException(nameof(source11));
  828. return Create<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)>(async observer =>
  829. {
  830. var d = new CompositeAsyncDisposable();
  831. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11) = AsyncObserver.Zip(observer);
  832. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  833. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  834. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  835. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  836. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  837. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  838. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  839. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  840. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  841. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  842. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  843. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11).ConfigureAwait(false);
  844. return d;
  845. });
  846. }
  847. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> selector)
  848. {
  849. if (source1 == null)
  850. throw new ArgumentNullException(nameof(source1));
  851. if (source2 == null)
  852. throw new ArgumentNullException(nameof(source2));
  853. if (source3 == null)
  854. throw new ArgumentNullException(nameof(source3));
  855. if (source4 == null)
  856. throw new ArgumentNullException(nameof(source4));
  857. if (source5 == null)
  858. throw new ArgumentNullException(nameof(source5));
  859. if (source6 == null)
  860. throw new ArgumentNullException(nameof(source6));
  861. if (source7 == null)
  862. throw new ArgumentNullException(nameof(source7));
  863. if (source8 == null)
  864. throw new ArgumentNullException(nameof(source8));
  865. if (source9 == null)
  866. throw new ArgumentNullException(nameof(source9));
  867. if (source10 == null)
  868. throw new ArgumentNullException(nameof(source10));
  869. if (source11 == null)
  870. throw new ArgumentNullException(nameof(source11));
  871. if (selector == null)
  872. throw new ArgumentNullException(nameof(selector));
  873. return Create<TResult>(async observer =>
  874. {
  875. var d = new CompositeAsyncDisposable();
  876. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11) = AsyncObserver.Zip(observer, selector);
  877. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  878. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  879. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  880. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  881. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  882. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  883. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  884. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  885. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  886. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  887. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  888. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11).ConfigureAwait(false);
  889. return d;
  890. });
  891. }
  892. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, Task<TResult>> selector)
  893. {
  894. if (source1 == null)
  895. throw new ArgumentNullException(nameof(source1));
  896. if (source2 == null)
  897. throw new ArgumentNullException(nameof(source2));
  898. if (source3 == null)
  899. throw new ArgumentNullException(nameof(source3));
  900. if (source4 == null)
  901. throw new ArgumentNullException(nameof(source4));
  902. if (source5 == null)
  903. throw new ArgumentNullException(nameof(source5));
  904. if (source6 == null)
  905. throw new ArgumentNullException(nameof(source6));
  906. if (source7 == null)
  907. throw new ArgumentNullException(nameof(source7));
  908. if (source8 == null)
  909. throw new ArgumentNullException(nameof(source8));
  910. if (source9 == null)
  911. throw new ArgumentNullException(nameof(source9));
  912. if (source10 == null)
  913. throw new ArgumentNullException(nameof(source10));
  914. if (source11 == null)
  915. throw new ArgumentNullException(nameof(source11));
  916. if (selector == null)
  917. throw new ArgumentNullException(nameof(selector));
  918. return Create<TResult>(async observer =>
  919. {
  920. var d = new CompositeAsyncDisposable();
  921. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11) = AsyncObserver.Zip(observer, selector);
  922. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  923. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  924. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  925. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  926. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  927. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  928. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  929. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  930. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  931. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  932. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  933. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11).ConfigureAwait(false);
  934. return d;
  935. });
  936. }
  937. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12)
  938. {
  939. if (source1 == null)
  940. throw new ArgumentNullException(nameof(source1));
  941. if (source2 == null)
  942. throw new ArgumentNullException(nameof(source2));
  943. if (source3 == null)
  944. throw new ArgumentNullException(nameof(source3));
  945. if (source4 == null)
  946. throw new ArgumentNullException(nameof(source4));
  947. if (source5 == null)
  948. throw new ArgumentNullException(nameof(source5));
  949. if (source6 == null)
  950. throw new ArgumentNullException(nameof(source6));
  951. if (source7 == null)
  952. throw new ArgumentNullException(nameof(source7));
  953. if (source8 == null)
  954. throw new ArgumentNullException(nameof(source8));
  955. if (source9 == null)
  956. throw new ArgumentNullException(nameof(source9));
  957. if (source10 == null)
  958. throw new ArgumentNullException(nameof(source10));
  959. if (source11 == null)
  960. throw new ArgumentNullException(nameof(source11));
  961. if (source12 == null)
  962. throw new ArgumentNullException(nameof(source12));
  963. return Create<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)>(async observer =>
  964. {
  965. var d = new CompositeAsyncDisposable();
  966. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12) = AsyncObserver.Zip(observer);
  967. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  968. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  969. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  970. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  971. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  972. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  973. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  974. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  975. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  976. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  977. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  978. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  979. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12).ConfigureAwait(false);
  980. return d;
  981. });
  982. }
  983. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> selector)
  984. {
  985. if (source1 == null)
  986. throw new ArgumentNullException(nameof(source1));
  987. if (source2 == null)
  988. throw new ArgumentNullException(nameof(source2));
  989. if (source3 == null)
  990. throw new ArgumentNullException(nameof(source3));
  991. if (source4 == null)
  992. throw new ArgumentNullException(nameof(source4));
  993. if (source5 == null)
  994. throw new ArgumentNullException(nameof(source5));
  995. if (source6 == null)
  996. throw new ArgumentNullException(nameof(source6));
  997. if (source7 == null)
  998. throw new ArgumentNullException(nameof(source7));
  999. if (source8 == null)
  1000. throw new ArgumentNullException(nameof(source8));
  1001. if (source9 == null)
  1002. throw new ArgumentNullException(nameof(source9));
  1003. if (source10 == null)
  1004. throw new ArgumentNullException(nameof(source10));
  1005. if (source11 == null)
  1006. throw new ArgumentNullException(nameof(source11));
  1007. if (source12 == null)
  1008. throw new ArgumentNullException(nameof(source12));
  1009. if (selector == null)
  1010. throw new ArgumentNullException(nameof(selector));
  1011. return Create<TResult>(async observer =>
  1012. {
  1013. var d = new CompositeAsyncDisposable();
  1014. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12) = AsyncObserver.Zip(observer, selector);
  1015. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1016. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1017. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1018. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1019. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1020. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1021. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1022. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1023. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1024. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1025. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1026. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1027. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12).ConfigureAwait(false);
  1028. return d;
  1029. });
  1030. }
  1031. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, Task<TResult>> selector)
  1032. {
  1033. if (source1 == null)
  1034. throw new ArgumentNullException(nameof(source1));
  1035. if (source2 == null)
  1036. throw new ArgumentNullException(nameof(source2));
  1037. if (source3 == null)
  1038. throw new ArgumentNullException(nameof(source3));
  1039. if (source4 == null)
  1040. throw new ArgumentNullException(nameof(source4));
  1041. if (source5 == null)
  1042. throw new ArgumentNullException(nameof(source5));
  1043. if (source6 == null)
  1044. throw new ArgumentNullException(nameof(source6));
  1045. if (source7 == null)
  1046. throw new ArgumentNullException(nameof(source7));
  1047. if (source8 == null)
  1048. throw new ArgumentNullException(nameof(source8));
  1049. if (source9 == null)
  1050. throw new ArgumentNullException(nameof(source9));
  1051. if (source10 == null)
  1052. throw new ArgumentNullException(nameof(source10));
  1053. if (source11 == null)
  1054. throw new ArgumentNullException(nameof(source11));
  1055. if (source12 == null)
  1056. throw new ArgumentNullException(nameof(source12));
  1057. if (selector == null)
  1058. throw new ArgumentNullException(nameof(selector));
  1059. return Create<TResult>(async observer =>
  1060. {
  1061. var d = new CompositeAsyncDisposable();
  1062. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12) = AsyncObserver.Zip(observer, selector);
  1063. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1064. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1065. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1066. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1067. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1068. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1069. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1070. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1071. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1072. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1073. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1074. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1075. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12).ConfigureAwait(false);
  1076. return d;
  1077. });
  1078. }
  1079. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13)
  1080. {
  1081. if (source1 == null)
  1082. throw new ArgumentNullException(nameof(source1));
  1083. if (source2 == null)
  1084. throw new ArgumentNullException(nameof(source2));
  1085. if (source3 == null)
  1086. throw new ArgumentNullException(nameof(source3));
  1087. if (source4 == null)
  1088. throw new ArgumentNullException(nameof(source4));
  1089. if (source5 == null)
  1090. throw new ArgumentNullException(nameof(source5));
  1091. if (source6 == null)
  1092. throw new ArgumentNullException(nameof(source6));
  1093. if (source7 == null)
  1094. throw new ArgumentNullException(nameof(source7));
  1095. if (source8 == null)
  1096. throw new ArgumentNullException(nameof(source8));
  1097. if (source9 == null)
  1098. throw new ArgumentNullException(nameof(source9));
  1099. if (source10 == null)
  1100. throw new ArgumentNullException(nameof(source10));
  1101. if (source11 == null)
  1102. throw new ArgumentNullException(nameof(source11));
  1103. if (source12 == null)
  1104. throw new ArgumentNullException(nameof(source12));
  1105. if (source13 == null)
  1106. throw new ArgumentNullException(nameof(source13));
  1107. return Create<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)>(async observer =>
  1108. {
  1109. var d = new CompositeAsyncDisposable();
  1110. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13) = AsyncObserver.Zip(observer);
  1111. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1112. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1113. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1114. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1115. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1116. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1117. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1118. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1119. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1120. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1121. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1122. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1123. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1124. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13).ConfigureAwait(false);
  1125. return d;
  1126. });
  1127. }
  1128. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> selector)
  1129. {
  1130. if (source1 == null)
  1131. throw new ArgumentNullException(nameof(source1));
  1132. if (source2 == null)
  1133. throw new ArgumentNullException(nameof(source2));
  1134. if (source3 == null)
  1135. throw new ArgumentNullException(nameof(source3));
  1136. if (source4 == null)
  1137. throw new ArgumentNullException(nameof(source4));
  1138. if (source5 == null)
  1139. throw new ArgumentNullException(nameof(source5));
  1140. if (source6 == null)
  1141. throw new ArgumentNullException(nameof(source6));
  1142. if (source7 == null)
  1143. throw new ArgumentNullException(nameof(source7));
  1144. if (source8 == null)
  1145. throw new ArgumentNullException(nameof(source8));
  1146. if (source9 == null)
  1147. throw new ArgumentNullException(nameof(source9));
  1148. if (source10 == null)
  1149. throw new ArgumentNullException(nameof(source10));
  1150. if (source11 == null)
  1151. throw new ArgumentNullException(nameof(source11));
  1152. if (source12 == null)
  1153. throw new ArgumentNullException(nameof(source12));
  1154. if (source13 == null)
  1155. throw new ArgumentNullException(nameof(source13));
  1156. if (selector == null)
  1157. throw new ArgumentNullException(nameof(selector));
  1158. return Create<TResult>(async observer =>
  1159. {
  1160. var d = new CompositeAsyncDisposable();
  1161. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13) = AsyncObserver.Zip(observer, selector);
  1162. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1163. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1164. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1165. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1166. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1167. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1168. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1169. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1170. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1171. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1172. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1173. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1174. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1175. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13).ConfigureAwait(false);
  1176. return d;
  1177. });
  1178. }
  1179. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Task<TResult>> selector)
  1180. {
  1181. if (source1 == null)
  1182. throw new ArgumentNullException(nameof(source1));
  1183. if (source2 == null)
  1184. throw new ArgumentNullException(nameof(source2));
  1185. if (source3 == null)
  1186. throw new ArgumentNullException(nameof(source3));
  1187. if (source4 == null)
  1188. throw new ArgumentNullException(nameof(source4));
  1189. if (source5 == null)
  1190. throw new ArgumentNullException(nameof(source5));
  1191. if (source6 == null)
  1192. throw new ArgumentNullException(nameof(source6));
  1193. if (source7 == null)
  1194. throw new ArgumentNullException(nameof(source7));
  1195. if (source8 == null)
  1196. throw new ArgumentNullException(nameof(source8));
  1197. if (source9 == null)
  1198. throw new ArgumentNullException(nameof(source9));
  1199. if (source10 == null)
  1200. throw new ArgumentNullException(nameof(source10));
  1201. if (source11 == null)
  1202. throw new ArgumentNullException(nameof(source11));
  1203. if (source12 == null)
  1204. throw new ArgumentNullException(nameof(source12));
  1205. if (source13 == null)
  1206. throw new ArgumentNullException(nameof(source13));
  1207. if (selector == null)
  1208. throw new ArgumentNullException(nameof(selector));
  1209. return Create<TResult>(async observer =>
  1210. {
  1211. var d = new CompositeAsyncDisposable();
  1212. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13) = AsyncObserver.Zip(observer, selector);
  1213. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1214. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1215. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1216. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1217. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1218. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1219. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1220. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1221. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1222. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1223. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1224. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1225. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1226. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13).ConfigureAwait(false);
  1227. return d;
  1228. });
  1229. }
  1230. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13, IAsyncObservable<T14> source14)
  1231. {
  1232. if (source1 == null)
  1233. throw new ArgumentNullException(nameof(source1));
  1234. if (source2 == null)
  1235. throw new ArgumentNullException(nameof(source2));
  1236. if (source3 == null)
  1237. throw new ArgumentNullException(nameof(source3));
  1238. if (source4 == null)
  1239. throw new ArgumentNullException(nameof(source4));
  1240. if (source5 == null)
  1241. throw new ArgumentNullException(nameof(source5));
  1242. if (source6 == null)
  1243. throw new ArgumentNullException(nameof(source6));
  1244. if (source7 == null)
  1245. throw new ArgumentNullException(nameof(source7));
  1246. if (source8 == null)
  1247. throw new ArgumentNullException(nameof(source8));
  1248. if (source9 == null)
  1249. throw new ArgumentNullException(nameof(source9));
  1250. if (source10 == null)
  1251. throw new ArgumentNullException(nameof(source10));
  1252. if (source11 == null)
  1253. throw new ArgumentNullException(nameof(source11));
  1254. if (source12 == null)
  1255. throw new ArgumentNullException(nameof(source12));
  1256. if (source13 == null)
  1257. throw new ArgumentNullException(nameof(source13));
  1258. if (source14 == null)
  1259. throw new ArgumentNullException(nameof(source14));
  1260. return Create<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)>(async observer =>
  1261. {
  1262. var d = new CompositeAsyncDisposable();
  1263. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13, observer14) = AsyncObserver.Zip(observer);
  1264. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1265. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1266. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1267. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1268. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1269. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1270. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1271. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1272. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1273. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1274. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1275. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1276. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1277. var sub14 = source14.SubscribeSafeAsync(observer14).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1278. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13, sub14).ConfigureAwait(false);
  1279. return d;
  1280. });
  1281. }
  1282. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13, IAsyncObservable<T14> source14, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> selector)
  1283. {
  1284. if (source1 == null)
  1285. throw new ArgumentNullException(nameof(source1));
  1286. if (source2 == null)
  1287. throw new ArgumentNullException(nameof(source2));
  1288. if (source3 == null)
  1289. throw new ArgumentNullException(nameof(source3));
  1290. if (source4 == null)
  1291. throw new ArgumentNullException(nameof(source4));
  1292. if (source5 == null)
  1293. throw new ArgumentNullException(nameof(source5));
  1294. if (source6 == null)
  1295. throw new ArgumentNullException(nameof(source6));
  1296. if (source7 == null)
  1297. throw new ArgumentNullException(nameof(source7));
  1298. if (source8 == null)
  1299. throw new ArgumentNullException(nameof(source8));
  1300. if (source9 == null)
  1301. throw new ArgumentNullException(nameof(source9));
  1302. if (source10 == null)
  1303. throw new ArgumentNullException(nameof(source10));
  1304. if (source11 == null)
  1305. throw new ArgumentNullException(nameof(source11));
  1306. if (source12 == null)
  1307. throw new ArgumentNullException(nameof(source12));
  1308. if (source13 == null)
  1309. throw new ArgumentNullException(nameof(source13));
  1310. if (source14 == null)
  1311. throw new ArgumentNullException(nameof(source14));
  1312. if (selector == null)
  1313. throw new ArgumentNullException(nameof(selector));
  1314. return Create<TResult>(async observer =>
  1315. {
  1316. var d = new CompositeAsyncDisposable();
  1317. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13, observer14) = AsyncObserver.Zip(observer, selector);
  1318. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1319. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1320. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1321. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1322. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1323. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1324. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1325. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1326. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1327. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1328. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1329. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1330. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1331. var sub14 = source14.SubscribeSafeAsync(observer14).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1332. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13, sub14).ConfigureAwait(false);
  1333. return d;
  1334. });
  1335. }
  1336. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13, IAsyncObservable<T14> source14, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, Task<TResult>> selector)
  1337. {
  1338. if (source1 == null)
  1339. throw new ArgumentNullException(nameof(source1));
  1340. if (source2 == null)
  1341. throw new ArgumentNullException(nameof(source2));
  1342. if (source3 == null)
  1343. throw new ArgumentNullException(nameof(source3));
  1344. if (source4 == null)
  1345. throw new ArgumentNullException(nameof(source4));
  1346. if (source5 == null)
  1347. throw new ArgumentNullException(nameof(source5));
  1348. if (source6 == null)
  1349. throw new ArgumentNullException(nameof(source6));
  1350. if (source7 == null)
  1351. throw new ArgumentNullException(nameof(source7));
  1352. if (source8 == null)
  1353. throw new ArgumentNullException(nameof(source8));
  1354. if (source9 == null)
  1355. throw new ArgumentNullException(nameof(source9));
  1356. if (source10 == null)
  1357. throw new ArgumentNullException(nameof(source10));
  1358. if (source11 == null)
  1359. throw new ArgumentNullException(nameof(source11));
  1360. if (source12 == null)
  1361. throw new ArgumentNullException(nameof(source12));
  1362. if (source13 == null)
  1363. throw new ArgumentNullException(nameof(source13));
  1364. if (source14 == null)
  1365. throw new ArgumentNullException(nameof(source14));
  1366. if (selector == null)
  1367. throw new ArgumentNullException(nameof(selector));
  1368. return Create<TResult>(async observer =>
  1369. {
  1370. var d = new CompositeAsyncDisposable();
  1371. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13, observer14) = AsyncObserver.Zip(observer, selector);
  1372. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1373. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1374. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1375. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1376. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1377. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1378. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1379. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1380. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1381. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1382. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1383. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1384. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1385. var sub14 = source14.SubscribeSafeAsync(observer14).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1386. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13, sub14).ConfigureAwait(false);
  1387. return d;
  1388. });
  1389. }
  1390. public static IAsyncObservable<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13, IAsyncObservable<T14> source14, IAsyncObservable<T15> source15)
  1391. {
  1392. if (source1 == null)
  1393. throw new ArgumentNullException(nameof(source1));
  1394. if (source2 == null)
  1395. throw new ArgumentNullException(nameof(source2));
  1396. if (source3 == null)
  1397. throw new ArgumentNullException(nameof(source3));
  1398. if (source4 == null)
  1399. throw new ArgumentNullException(nameof(source4));
  1400. if (source5 == null)
  1401. throw new ArgumentNullException(nameof(source5));
  1402. if (source6 == null)
  1403. throw new ArgumentNullException(nameof(source6));
  1404. if (source7 == null)
  1405. throw new ArgumentNullException(nameof(source7));
  1406. if (source8 == null)
  1407. throw new ArgumentNullException(nameof(source8));
  1408. if (source9 == null)
  1409. throw new ArgumentNullException(nameof(source9));
  1410. if (source10 == null)
  1411. throw new ArgumentNullException(nameof(source10));
  1412. if (source11 == null)
  1413. throw new ArgumentNullException(nameof(source11));
  1414. if (source12 == null)
  1415. throw new ArgumentNullException(nameof(source12));
  1416. if (source13 == null)
  1417. throw new ArgumentNullException(nameof(source13));
  1418. if (source14 == null)
  1419. throw new ArgumentNullException(nameof(source14));
  1420. if (source15 == null)
  1421. throw new ArgumentNullException(nameof(source15));
  1422. return Create<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)>(async observer =>
  1423. {
  1424. var d = new CompositeAsyncDisposable();
  1425. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13, observer14, observer15) = AsyncObserver.Zip(observer);
  1426. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1427. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1428. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1429. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1430. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1431. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1432. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1433. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1434. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1435. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1436. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1437. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1438. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1439. var sub14 = source14.SubscribeSafeAsync(observer14).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1440. var sub15 = source15.SubscribeSafeAsync(observer15).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1441. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13, sub14, sub15).ConfigureAwait(false);
  1442. return d;
  1443. });
  1444. }
  1445. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13, IAsyncObservable<T14> source14, IAsyncObservable<T15> source15, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> selector)
  1446. {
  1447. if (source1 == null)
  1448. throw new ArgumentNullException(nameof(source1));
  1449. if (source2 == null)
  1450. throw new ArgumentNullException(nameof(source2));
  1451. if (source3 == null)
  1452. throw new ArgumentNullException(nameof(source3));
  1453. if (source4 == null)
  1454. throw new ArgumentNullException(nameof(source4));
  1455. if (source5 == null)
  1456. throw new ArgumentNullException(nameof(source5));
  1457. if (source6 == null)
  1458. throw new ArgumentNullException(nameof(source6));
  1459. if (source7 == null)
  1460. throw new ArgumentNullException(nameof(source7));
  1461. if (source8 == null)
  1462. throw new ArgumentNullException(nameof(source8));
  1463. if (source9 == null)
  1464. throw new ArgumentNullException(nameof(source9));
  1465. if (source10 == null)
  1466. throw new ArgumentNullException(nameof(source10));
  1467. if (source11 == null)
  1468. throw new ArgumentNullException(nameof(source11));
  1469. if (source12 == null)
  1470. throw new ArgumentNullException(nameof(source12));
  1471. if (source13 == null)
  1472. throw new ArgumentNullException(nameof(source13));
  1473. if (source14 == null)
  1474. throw new ArgumentNullException(nameof(source14));
  1475. if (source15 == null)
  1476. throw new ArgumentNullException(nameof(source15));
  1477. if (selector == null)
  1478. throw new ArgumentNullException(nameof(selector));
  1479. return Create<TResult>(async observer =>
  1480. {
  1481. var d = new CompositeAsyncDisposable();
  1482. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13, observer14, observer15) = AsyncObserver.Zip(observer, selector);
  1483. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1484. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1485. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1486. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1487. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1488. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1489. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1490. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1491. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1492. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1493. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1494. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1495. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1496. var sub14 = source14.SubscribeSafeAsync(observer14).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1497. var sub15 = source15.SubscribeSafeAsync(observer15).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1498. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13, sub14, sub15).ConfigureAwait(false);
  1499. return d;
  1500. });
  1501. }
  1502. public static IAsyncObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(this IAsyncObservable<T1> source1, IAsyncObservable<T2> source2, IAsyncObservable<T3> source3, IAsyncObservable<T4> source4, IAsyncObservable<T5> source5, IAsyncObservable<T6> source6, IAsyncObservable<T7> source7, IAsyncObservable<T8> source8, IAsyncObservable<T9> source9, IAsyncObservable<T10> source10, IAsyncObservable<T11> source11, IAsyncObservable<T12> source12, IAsyncObservable<T13> source13, IAsyncObservable<T14> source14, IAsyncObservable<T15> source15, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, Task<TResult>> selector)
  1503. {
  1504. if (source1 == null)
  1505. throw new ArgumentNullException(nameof(source1));
  1506. if (source2 == null)
  1507. throw new ArgumentNullException(nameof(source2));
  1508. if (source3 == null)
  1509. throw new ArgumentNullException(nameof(source3));
  1510. if (source4 == null)
  1511. throw new ArgumentNullException(nameof(source4));
  1512. if (source5 == null)
  1513. throw new ArgumentNullException(nameof(source5));
  1514. if (source6 == null)
  1515. throw new ArgumentNullException(nameof(source6));
  1516. if (source7 == null)
  1517. throw new ArgumentNullException(nameof(source7));
  1518. if (source8 == null)
  1519. throw new ArgumentNullException(nameof(source8));
  1520. if (source9 == null)
  1521. throw new ArgumentNullException(nameof(source9));
  1522. if (source10 == null)
  1523. throw new ArgumentNullException(nameof(source10));
  1524. if (source11 == null)
  1525. throw new ArgumentNullException(nameof(source11));
  1526. if (source12 == null)
  1527. throw new ArgumentNullException(nameof(source12));
  1528. if (source13 == null)
  1529. throw new ArgumentNullException(nameof(source13));
  1530. if (source14 == null)
  1531. throw new ArgumentNullException(nameof(source14));
  1532. if (source15 == null)
  1533. throw new ArgumentNullException(nameof(source15));
  1534. if (selector == null)
  1535. throw new ArgumentNullException(nameof(selector));
  1536. return Create<TResult>(async observer =>
  1537. {
  1538. var d = new CompositeAsyncDisposable();
  1539. var (observer1, observer2, observer3, observer4, observer5, observer6, observer7, observer8, observer9, observer10, observer11, observer12, observer13, observer14, observer15) = AsyncObserver.Zip(observer, selector);
  1540. var sub1 = source1.SubscribeSafeAsync(observer1).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1541. var sub2 = source2.SubscribeSafeAsync(observer2).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1542. var sub3 = source3.SubscribeSafeAsync(observer3).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1543. var sub4 = source4.SubscribeSafeAsync(observer4).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1544. var sub5 = source5.SubscribeSafeAsync(observer5).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1545. var sub6 = source6.SubscribeSafeAsync(observer6).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1546. var sub7 = source7.SubscribeSafeAsync(observer7).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1547. var sub8 = source8.SubscribeSafeAsync(observer8).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1548. var sub9 = source9.SubscribeSafeAsync(observer9).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1549. var sub10 = source10.SubscribeSafeAsync(observer10).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1550. var sub11 = source11.SubscribeSafeAsync(observer11).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1551. var sub12 = source12.SubscribeSafeAsync(observer12).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1552. var sub13 = source13.SubscribeSafeAsync(observer13).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1553. var sub14 = source14.SubscribeSafeAsync(observer14).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1554. var sub15 = source15.SubscribeSafeAsync(observer15).ContinueWith(disposable => d.AddAsync(disposable.Result)).Unwrap();
  1555. await Task.WhenAll(sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10, sub11, sub12, sub13, sub14, sub15).ConfigureAwait(false);
  1556. return d;
  1557. });
  1558. }
  1559. }
  1560. partial class AsyncObserver
  1561. {
  1562. public static (IAsyncObserver<T1>, IAsyncObserver<T2>) Zip<T1, T2>(IAsyncObserver<(T1, T2)> observer)
  1563. {
  1564. if (observer == null)
  1565. throw new ArgumentNullException(nameof(observer));
  1566. var gate = new AsyncLock();
  1567. var values1 = new Queue<T1>();
  1568. var values2 = new Queue<T2>();
  1569. var isDone = new bool[2];
  1570. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  1571. Create<T>(
  1572. async x =>
  1573. {
  1574. using (await gate.LockAsync().ConfigureAwait(false))
  1575. {
  1576. queue.Enqueue(x);
  1577. if (values1.Count > 0 && values2.Count > 0)
  1578. {
  1579. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue())).ConfigureAwait(false);
  1580. }
  1581. else
  1582. {
  1583. var allDone = true;
  1584. for (var i = 0; i < 2; i++)
  1585. {
  1586. if (i != index && !isDone[i])
  1587. {
  1588. allDone = false;
  1589. break;
  1590. }
  1591. }
  1592. if (allDone)
  1593. {
  1594. await observer.OnCompletedAsync().ConfigureAwait(false);
  1595. }
  1596. }
  1597. }
  1598. },
  1599. async ex =>
  1600. {
  1601. using (await gate.LockAsync().ConfigureAwait(false))
  1602. {
  1603. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1604. }
  1605. },
  1606. async () =>
  1607. {
  1608. using (await gate.LockAsync().ConfigureAwait(false))
  1609. {
  1610. isDone[index] = true;
  1611. var allDone = true;
  1612. for (var i = 0; i < 2; i++)
  1613. {
  1614. if (!isDone[i])
  1615. {
  1616. allDone = false;
  1617. break;
  1618. }
  1619. }
  1620. if (allDone)
  1621. {
  1622. await observer.OnCompletedAsync().ConfigureAwait(false);
  1623. }
  1624. }
  1625. }
  1626. );
  1627. return
  1628. (
  1629. CreateObserver<T1>(1, values1),
  1630. CreateObserver<T2>(2, values2)
  1631. );
  1632. }
  1633. public static (IAsyncObserver<T1>, IAsyncObserver<T2>) Zip<T1, T2, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, TResult> selector)
  1634. {
  1635. if (observer == null)
  1636. throw new ArgumentNullException(nameof(observer));
  1637. if (selector == null)
  1638. throw new ArgumentNullException(nameof(selector));
  1639. return Zip<T1, T2, TResult>(observer, (x1, x2) => Task.FromResult(selector(x1, x2)));
  1640. }
  1641. public static (IAsyncObserver<T1>, IAsyncObserver<T2>) Zip<T1, T2, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, Task<TResult>> selector)
  1642. {
  1643. if (observer == null)
  1644. throw new ArgumentNullException(nameof(observer));
  1645. if (selector == null)
  1646. throw new ArgumentNullException(nameof(selector));
  1647. var gate = new AsyncLock();
  1648. var values1 = new Queue<T1>();
  1649. var values2 = new Queue<T2>();
  1650. var isDone = new bool[2];
  1651. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  1652. Create<T>(
  1653. async x =>
  1654. {
  1655. using (await gate.LockAsync().ConfigureAwait(false))
  1656. {
  1657. queue.Enqueue(x);
  1658. if (values1.Count > 0 && values2.Count > 0)
  1659. {
  1660. TResult res;
  1661. try
  1662. {
  1663. res = await selector(values1.Dequeue(), values2.Dequeue()).ConfigureAwait(false);
  1664. }
  1665. catch (Exception ex)
  1666. {
  1667. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1668. return;
  1669. }
  1670. await observer.OnNextAsync(res).ConfigureAwait(false);
  1671. }
  1672. else
  1673. {
  1674. var allDone = true;
  1675. for (var i = 0; i < 2; i++)
  1676. {
  1677. if (i != index && !isDone[i])
  1678. {
  1679. allDone = false;
  1680. break;
  1681. }
  1682. }
  1683. if (allDone)
  1684. {
  1685. await observer.OnCompletedAsync().ConfigureAwait(false);
  1686. }
  1687. }
  1688. }
  1689. },
  1690. async ex =>
  1691. {
  1692. using (await gate.LockAsync().ConfigureAwait(false))
  1693. {
  1694. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1695. }
  1696. },
  1697. async () =>
  1698. {
  1699. using (await gate.LockAsync().ConfigureAwait(false))
  1700. {
  1701. isDone[index] = true;
  1702. var allDone = true;
  1703. for (var i = 0; i < 2; i++)
  1704. {
  1705. if (!isDone[i])
  1706. {
  1707. allDone = false;
  1708. break;
  1709. }
  1710. }
  1711. if (allDone)
  1712. {
  1713. await observer.OnCompletedAsync().ConfigureAwait(false);
  1714. }
  1715. }
  1716. }
  1717. );
  1718. return
  1719. (
  1720. CreateObserver<T1>(1, values1),
  1721. CreateObserver<T2>(2, values2)
  1722. );
  1723. }
  1724. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>) Zip<T1, T2, T3>(IAsyncObserver<(T1, T2, T3)> observer)
  1725. {
  1726. if (observer == null)
  1727. throw new ArgumentNullException(nameof(observer));
  1728. var gate = new AsyncLock();
  1729. var values1 = new Queue<T1>();
  1730. var values2 = new Queue<T2>();
  1731. var values3 = new Queue<T3>();
  1732. var isDone = new bool[3];
  1733. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  1734. Create<T>(
  1735. async x =>
  1736. {
  1737. using (await gate.LockAsync().ConfigureAwait(false))
  1738. {
  1739. queue.Enqueue(x);
  1740. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0)
  1741. {
  1742. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue())).ConfigureAwait(false);
  1743. }
  1744. else
  1745. {
  1746. var allDone = true;
  1747. for (var i = 0; i < 3; i++)
  1748. {
  1749. if (i != index && !isDone[i])
  1750. {
  1751. allDone = false;
  1752. break;
  1753. }
  1754. }
  1755. if (allDone)
  1756. {
  1757. await observer.OnCompletedAsync().ConfigureAwait(false);
  1758. }
  1759. }
  1760. }
  1761. },
  1762. async ex =>
  1763. {
  1764. using (await gate.LockAsync().ConfigureAwait(false))
  1765. {
  1766. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1767. }
  1768. },
  1769. async () =>
  1770. {
  1771. using (await gate.LockAsync().ConfigureAwait(false))
  1772. {
  1773. isDone[index] = true;
  1774. var allDone = true;
  1775. for (var i = 0; i < 3; i++)
  1776. {
  1777. if (!isDone[i])
  1778. {
  1779. allDone = false;
  1780. break;
  1781. }
  1782. }
  1783. if (allDone)
  1784. {
  1785. await observer.OnCompletedAsync().ConfigureAwait(false);
  1786. }
  1787. }
  1788. }
  1789. );
  1790. return
  1791. (
  1792. CreateObserver<T1>(1, values1),
  1793. CreateObserver<T2>(2, values2),
  1794. CreateObserver<T3>(3, values3)
  1795. );
  1796. }
  1797. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>) Zip<T1, T2, T3, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, TResult> selector)
  1798. {
  1799. if (observer == null)
  1800. throw new ArgumentNullException(nameof(observer));
  1801. if (selector == null)
  1802. throw new ArgumentNullException(nameof(selector));
  1803. return Zip<T1, T2, T3, TResult>(observer, (x1, x2, x3) => Task.FromResult(selector(x1, x2, x3)));
  1804. }
  1805. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>) Zip<T1, T2, T3, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, Task<TResult>> selector)
  1806. {
  1807. if (observer == null)
  1808. throw new ArgumentNullException(nameof(observer));
  1809. if (selector == null)
  1810. throw new ArgumentNullException(nameof(selector));
  1811. var gate = new AsyncLock();
  1812. var values1 = new Queue<T1>();
  1813. var values2 = new Queue<T2>();
  1814. var values3 = new Queue<T3>();
  1815. var isDone = new bool[3];
  1816. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  1817. Create<T>(
  1818. async x =>
  1819. {
  1820. using (await gate.LockAsync().ConfigureAwait(false))
  1821. {
  1822. queue.Enqueue(x);
  1823. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0)
  1824. {
  1825. TResult res;
  1826. try
  1827. {
  1828. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue()).ConfigureAwait(false);
  1829. }
  1830. catch (Exception ex)
  1831. {
  1832. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1833. return;
  1834. }
  1835. await observer.OnNextAsync(res).ConfigureAwait(false);
  1836. }
  1837. else
  1838. {
  1839. var allDone = true;
  1840. for (var i = 0; i < 3; i++)
  1841. {
  1842. if (i != index && !isDone[i])
  1843. {
  1844. allDone = false;
  1845. break;
  1846. }
  1847. }
  1848. if (allDone)
  1849. {
  1850. await observer.OnCompletedAsync().ConfigureAwait(false);
  1851. }
  1852. }
  1853. }
  1854. },
  1855. async ex =>
  1856. {
  1857. using (await gate.LockAsync().ConfigureAwait(false))
  1858. {
  1859. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1860. }
  1861. },
  1862. async () =>
  1863. {
  1864. using (await gate.LockAsync().ConfigureAwait(false))
  1865. {
  1866. isDone[index] = true;
  1867. var allDone = true;
  1868. for (var i = 0; i < 3; i++)
  1869. {
  1870. if (!isDone[i])
  1871. {
  1872. allDone = false;
  1873. break;
  1874. }
  1875. }
  1876. if (allDone)
  1877. {
  1878. await observer.OnCompletedAsync().ConfigureAwait(false);
  1879. }
  1880. }
  1881. }
  1882. );
  1883. return
  1884. (
  1885. CreateObserver<T1>(1, values1),
  1886. CreateObserver<T2>(2, values2),
  1887. CreateObserver<T3>(3, values3)
  1888. );
  1889. }
  1890. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>) Zip<T1, T2, T3, T4>(IAsyncObserver<(T1, T2, T3, T4)> observer)
  1891. {
  1892. if (observer == null)
  1893. throw new ArgumentNullException(nameof(observer));
  1894. var gate = new AsyncLock();
  1895. var values1 = new Queue<T1>();
  1896. var values2 = new Queue<T2>();
  1897. var values3 = new Queue<T3>();
  1898. var values4 = new Queue<T4>();
  1899. var isDone = new bool[4];
  1900. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  1901. Create<T>(
  1902. async x =>
  1903. {
  1904. using (await gate.LockAsync().ConfigureAwait(false))
  1905. {
  1906. queue.Enqueue(x);
  1907. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0)
  1908. {
  1909. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue())).ConfigureAwait(false);
  1910. }
  1911. else
  1912. {
  1913. var allDone = true;
  1914. for (var i = 0; i < 4; i++)
  1915. {
  1916. if (i != index && !isDone[i])
  1917. {
  1918. allDone = false;
  1919. break;
  1920. }
  1921. }
  1922. if (allDone)
  1923. {
  1924. await observer.OnCompletedAsync().ConfigureAwait(false);
  1925. }
  1926. }
  1927. }
  1928. },
  1929. async ex =>
  1930. {
  1931. using (await gate.LockAsync().ConfigureAwait(false))
  1932. {
  1933. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1934. }
  1935. },
  1936. async () =>
  1937. {
  1938. using (await gate.LockAsync().ConfigureAwait(false))
  1939. {
  1940. isDone[index] = true;
  1941. var allDone = true;
  1942. for (var i = 0; i < 4; i++)
  1943. {
  1944. if (!isDone[i])
  1945. {
  1946. allDone = false;
  1947. break;
  1948. }
  1949. }
  1950. if (allDone)
  1951. {
  1952. await observer.OnCompletedAsync().ConfigureAwait(false);
  1953. }
  1954. }
  1955. }
  1956. );
  1957. return
  1958. (
  1959. CreateObserver<T1>(1, values1),
  1960. CreateObserver<T2>(2, values2),
  1961. CreateObserver<T3>(3, values3),
  1962. CreateObserver<T4>(4, values4)
  1963. );
  1964. }
  1965. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>) Zip<T1, T2, T3, T4, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, TResult> selector)
  1966. {
  1967. if (observer == null)
  1968. throw new ArgumentNullException(nameof(observer));
  1969. if (selector == null)
  1970. throw new ArgumentNullException(nameof(selector));
  1971. return Zip<T1, T2, T3, T4, TResult>(observer, (x1, x2, x3, x4) => Task.FromResult(selector(x1, x2, x3, x4)));
  1972. }
  1973. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>) Zip<T1, T2, T3, T4, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, Task<TResult>> selector)
  1974. {
  1975. if (observer == null)
  1976. throw new ArgumentNullException(nameof(observer));
  1977. if (selector == null)
  1978. throw new ArgumentNullException(nameof(selector));
  1979. var gate = new AsyncLock();
  1980. var values1 = new Queue<T1>();
  1981. var values2 = new Queue<T2>();
  1982. var values3 = new Queue<T3>();
  1983. var values4 = new Queue<T4>();
  1984. var isDone = new bool[4];
  1985. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  1986. Create<T>(
  1987. async x =>
  1988. {
  1989. using (await gate.LockAsync().ConfigureAwait(false))
  1990. {
  1991. queue.Enqueue(x);
  1992. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0)
  1993. {
  1994. TResult res;
  1995. try
  1996. {
  1997. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue()).ConfigureAwait(false);
  1998. }
  1999. catch (Exception ex)
  2000. {
  2001. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2002. return;
  2003. }
  2004. await observer.OnNextAsync(res).ConfigureAwait(false);
  2005. }
  2006. else
  2007. {
  2008. var allDone = true;
  2009. for (var i = 0; i < 4; i++)
  2010. {
  2011. if (i != index && !isDone[i])
  2012. {
  2013. allDone = false;
  2014. break;
  2015. }
  2016. }
  2017. if (allDone)
  2018. {
  2019. await observer.OnCompletedAsync().ConfigureAwait(false);
  2020. }
  2021. }
  2022. }
  2023. },
  2024. async ex =>
  2025. {
  2026. using (await gate.LockAsync().ConfigureAwait(false))
  2027. {
  2028. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2029. }
  2030. },
  2031. async () =>
  2032. {
  2033. using (await gate.LockAsync().ConfigureAwait(false))
  2034. {
  2035. isDone[index] = true;
  2036. var allDone = true;
  2037. for (var i = 0; i < 4; i++)
  2038. {
  2039. if (!isDone[i])
  2040. {
  2041. allDone = false;
  2042. break;
  2043. }
  2044. }
  2045. if (allDone)
  2046. {
  2047. await observer.OnCompletedAsync().ConfigureAwait(false);
  2048. }
  2049. }
  2050. }
  2051. );
  2052. return
  2053. (
  2054. CreateObserver<T1>(1, values1),
  2055. CreateObserver<T2>(2, values2),
  2056. CreateObserver<T3>(3, values3),
  2057. CreateObserver<T4>(4, values4)
  2058. );
  2059. }
  2060. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>) Zip<T1, T2, T3, T4, T5>(IAsyncObserver<(T1, T2, T3, T4, T5)> observer)
  2061. {
  2062. if (observer == null)
  2063. throw new ArgumentNullException(nameof(observer));
  2064. var gate = new AsyncLock();
  2065. var values1 = new Queue<T1>();
  2066. var values2 = new Queue<T2>();
  2067. var values3 = new Queue<T3>();
  2068. var values4 = new Queue<T4>();
  2069. var values5 = new Queue<T5>();
  2070. var isDone = new bool[5];
  2071. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2072. Create<T>(
  2073. async x =>
  2074. {
  2075. using (await gate.LockAsync().ConfigureAwait(false))
  2076. {
  2077. queue.Enqueue(x);
  2078. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0)
  2079. {
  2080. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue())).ConfigureAwait(false);
  2081. }
  2082. else
  2083. {
  2084. var allDone = true;
  2085. for (var i = 0; i < 5; i++)
  2086. {
  2087. if (i != index && !isDone[i])
  2088. {
  2089. allDone = false;
  2090. break;
  2091. }
  2092. }
  2093. if (allDone)
  2094. {
  2095. await observer.OnCompletedAsync().ConfigureAwait(false);
  2096. }
  2097. }
  2098. }
  2099. },
  2100. async ex =>
  2101. {
  2102. using (await gate.LockAsync().ConfigureAwait(false))
  2103. {
  2104. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2105. }
  2106. },
  2107. async () =>
  2108. {
  2109. using (await gate.LockAsync().ConfigureAwait(false))
  2110. {
  2111. isDone[index] = true;
  2112. var allDone = true;
  2113. for (var i = 0; i < 5; i++)
  2114. {
  2115. if (!isDone[i])
  2116. {
  2117. allDone = false;
  2118. break;
  2119. }
  2120. }
  2121. if (allDone)
  2122. {
  2123. await observer.OnCompletedAsync().ConfigureAwait(false);
  2124. }
  2125. }
  2126. }
  2127. );
  2128. return
  2129. (
  2130. CreateObserver<T1>(1, values1),
  2131. CreateObserver<T2>(2, values2),
  2132. CreateObserver<T3>(3, values3),
  2133. CreateObserver<T4>(4, values4),
  2134. CreateObserver<T5>(5, values5)
  2135. );
  2136. }
  2137. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>) Zip<T1, T2, T3, T4, T5, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, TResult> selector)
  2138. {
  2139. if (observer == null)
  2140. throw new ArgumentNullException(nameof(observer));
  2141. if (selector == null)
  2142. throw new ArgumentNullException(nameof(selector));
  2143. return Zip<T1, T2, T3, T4, T5, TResult>(observer, (x1, x2, x3, x4, x5) => Task.FromResult(selector(x1, x2, x3, x4, x5)));
  2144. }
  2145. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>) Zip<T1, T2, T3, T4, T5, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, Task<TResult>> selector)
  2146. {
  2147. if (observer == null)
  2148. throw new ArgumentNullException(nameof(observer));
  2149. if (selector == null)
  2150. throw new ArgumentNullException(nameof(selector));
  2151. var gate = new AsyncLock();
  2152. var values1 = new Queue<T1>();
  2153. var values2 = new Queue<T2>();
  2154. var values3 = new Queue<T3>();
  2155. var values4 = new Queue<T4>();
  2156. var values5 = new Queue<T5>();
  2157. var isDone = new bool[5];
  2158. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2159. Create<T>(
  2160. async x =>
  2161. {
  2162. using (await gate.LockAsync().ConfigureAwait(false))
  2163. {
  2164. queue.Enqueue(x);
  2165. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0)
  2166. {
  2167. TResult res;
  2168. try
  2169. {
  2170. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue()).ConfigureAwait(false);
  2171. }
  2172. catch (Exception ex)
  2173. {
  2174. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2175. return;
  2176. }
  2177. await observer.OnNextAsync(res).ConfigureAwait(false);
  2178. }
  2179. else
  2180. {
  2181. var allDone = true;
  2182. for (var i = 0; i < 5; i++)
  2183. {
  2184. if (i != index && !isDone[i])
  2185. {
  2186. allDone = false;
  2187. break;
  2188. }
  2189. }
  2190. if (allDone)
  2191. {
  2192. await observer.OnCompletedAsync().ConfigureAwait(false);
  2193. }
  2194. }
  2195. }
  2196. },
  2197. async ex =>
  2198. {
  2199. using (await gate.LockAsync().ConfigureAwait(false))
  2200. {
  2201. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2202. }
  2203. },
  2204. async () =>
  2205. {
  2206. using (await gate.LockAsync().ConfigureAwait(false))
  2207. {
  2208. isDone[index] = true;
  2209. var allDone = true;
  2210. for (var i = 0; i < 5; i++)
  2211. {
  2212. if (!isDone[i])
  2213. {
  2214. allDone = false;
  2215. break;
  2216. }
  2217. }
  2218. if (allDone)
  2219. {
  2220. await observer.OnCompletedAsync().ConfigureAwait(false);
  2221. }
  2222. }
  2223. }
  2224. );
  2225. return
  2226. (
  2227. CreateObserver<T1>(1, values1),
  2228. CreateObserver<T2>(2, values2),
  2229. CreateObserver<T3>(3, values3),
  2230. CreateObserver<T4>(4, values4),
  2231. CreateObserver<T5>(5, values5)
  2232. );
  2233. }
  2234. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>) Zip<T1, T2, T3, T4, T5, T6>(IAsyncObserver<(T1, T2, T3, T4, T5, T6)> observer)
  2235. {
  2236. if (observer == null)
  2237. throw new ArgumentNullException(nameof(observer));
  2238. var gate = new AsyncLock();
  2239. var values1 = new Queue<T1>();
  2240. var values2 = new Queue<T2>();
  2241. var values3 = new Queue<T3>();
  2242. var values4 = new Queue<T4>();
  2243. var values5 = new Queue<T5>();
  2244. var values6 = new Queue<T6>();
  2245. var isDone = new bool[6];
  2246. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2247. Create<T>(
  2248. async x =>
  2249. {
  2250. using (await gate.LockAsync().ConfigureAwait(false))
  2251. {
  2252. queue.Enqueue(x);
  2253. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0)
  2254. {
  2255. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue())).ConfigureAwait(false);
  2256. }
  2257. else
  2258. {
  2259. var allDone = true;
  2260. for (var i = 0; i < 6; i++)
  2261. {
  2262. if (i != index && !isDone[i])
  2263. {
  2264. allDone = false;
  2265. break;
  2266. }
  2267. }
  2268. if (allDone)
  2269. {
  2270. await observer.OnCompletedAsync().ConfigureAwait(false);
  2271. }
  2272. }
  2273. }
  2274. },
  2275. async ex =>
  2276. {
  2277. using (await gate.LockAsync().ConfigureAwait(false))
  2278. {
  2279. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2280. }
  2281. },
  2282. async () =>
  2283. {
  2284. using (await gate.LockAsync().ConfigureAwait(false))
  2285. {
  2286. isDone[index] = true;
  2287. var allDone = true;
  2288. for (var i = 0; i < 6; i++)
  2289. {
  2290. if (!isDone[i])
  2291. {
  2292. allDone = false;
  2293. break;
  2294. }
  2295. }
  2296. if (allDone)
  2297. {
  2298. await observer.OnCompletedAsync().ConfigureAwait(false);
  2299. }
  2300. }
  2301. }
  2302. );
  2303. return
  2304. (
  2305. CreateObserver<T1>(1, values1),
  2306. CreateObserver<T2>(2, values2),
  2307. CreateObserver<T3>(3, values3),
  2308. CreateObserver<T4>(4, values4),
  2309. CreateObserver<T5>(5, values5),
  2310. CreateObserver<T6>(6, values6)
  2311. );
  2312. }
  2313. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>) Zip<T1, T2, T3, T4, T5, T6, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, TResult> selector)
  2314. {
  2315. if (observer == null)
  2316. throw new ArgumentNullException(nameof(observer));
  2317. if (selector == null)
  2318. throw new ArgumentNullException(nameof(selector));
  2319. return Zip<T1, T2, T3, T4, T5, T6, TResult>(observer, (x1, x2, x3, x4, x5, x6) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6)));
  2320. }
  2321. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>) Zip<T1, T2, T3, T4, T5, T6, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, Task<TResult>> selector)
  2322. {
  2323. if (observer == null)
  2324. throw new ArgumentNullException(nameof(observer));
  2325. if (selector == null)
  2326. throw new ArgumentNullException(nameof(selector));
  2327. var gate = new AsyncLock();
  2328. var values1 = new Queue<T1>();
  2329. var values2 = new Queue<T2>();
  2330. var values3 = new Queue<T3>();
  2331. var values4 = new Queue<T4>();
  2332. var values5 = new Queue<T5>();
  2333. var values6 = new Queue<T6>();
  2334. var isDone = new bool[6];
  2335. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2336. Create<T>(
  2337. async x =>
  2338. {
  2339. using (await gate.LockAsync().ConfigureAwait(false))
  2340. {
  2341. queue.Enqueue(x);
  2342. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0)
  2343. {
  2344. TResult res;
  2345. try
  2346. {
  2347. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue()).ConfigureAwait(false);
  2348. }
  2349. catch (Exception ex)
  2350. {
  2351. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2352. return;
  2353. }
  2354. await observer.OnNextAsync(res).ConfigureAwait(false);
  2355. }
  2356. else
  2357. {
  2358. var allDone = true;
  2359. for (var i = 0; i < 6; i++)
  2360. {
  2361. if (i != index && !isDone[i])
  2362. {
  2363. allDone = false;
  2364. break;
  2365. }
  2366. }
  2367. if (allDone)
  2368. {
  2369. await observer.OnCompletedAsync().ConfigureAwait(false);
  2370. }
  2371. }
  2372. }
  2373. },
  2374. async ex =>
  2375. {
  2376. using (await gate.LockAsync().ConfigureAwait(false))
  2377. {
  2378. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2379. }
  2380. },
  2381. async () =>
  2382. {
  2383. using (await gate.LockAsync().ConfigureAwait(false))
  2384. {
  2385. isDone[index] = true;
  2386. var allDone = true;
  2387. for (var i = 0; i < 6; i++)
  2388. {
  2389. if (!isDone[i])
  2390. {
  2391. allDone = false;
  2392. break;
  2393. }
  2394. }
  2395. if (allDone)
  2396. {
  2397. await observer.OnCompletedAsync().ConfigureAwait(false);
  2398. }
  2399. }
  2400. }
  2401. );
  2402. return
  2403. (
  2404. CreateObserver<T1>(1, values1),
  2405. CreateObserver<T2>(2, values2),
  2406. CreateObserver<T3>(3, values3),
  2407. CreateObserver<T4>(4, values4),
  2408. CreateObserver<T5>(5, values5),
  2409. CreateObserver<T6>(6, values6)
  2410. );
  2411. }
  2412. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>) Zip<T1, T2, T3, T4, T5, T6, T7>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7)> observer)
  2413. {
  2414. if (observer == null)
  2415. throw new ArgumentNullException(nameof(observer));
  2416. var gate = new AsyncLock();
  2417. var values1 = new Queue<T1>();
  2418. var values2 = new Queue<T2>();
  2419. var values3 = new Queue<T3>();
  2420. var values4 = new Queue<T4>();
  2421. var values5 = new Queue<T5>();
  2422. var values6 = new Queue<T6>();
  2423. var values7 = new Queue<T7>();
  2424. var isDone = new bool[7];
  2425. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2426. Create<T>(
  2427. async x =>
  2428. {
  2429. using (await gate.LockAsync().ConfigureAwait(false))
  2430. {
  2431. queue.Enqueue(x);
  2432. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0)
  2433. {
  2434. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue())).ConfigureAwait(false);
  2435. }
  2436. else
  2437. {
  2438. var allDone = true;
  2439. for (var i = 0; i < 7; i++)
  2440. {
  2441. if (i != index && !isDone[i])
  2442. {
  2443. allDone = false;
  2444. break;
  2445. }
  2446. }
  2447. if (allDone)
  2448. {
  2449. await observer.OnCompletedAsync().ConfigureAwait(false);
  2450. }
  2451. }
  2452. }
  2453. },
  2454. async ex =>
  2455. {
  2456. using (await gate.LockAsync().ConfigureAwait(false))
  2457. {
  2458. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2459. }
  2460. },
  2461. async () =>
  2462. {
  2463. using (await gate.LockAsync().ConfigureAwait(false))
  2464. {
  2465. isDone[index] = true;
  2466. var allDone = true;
  2467. for (var i = 0; i < 7; i++)
  2468. {
  2469. if (!isDone[i])
  2470. {
  2471. allDone = false;
  2472. break;
  2473. }
  2474. }
  2475. if (allDone)
  2476. {
  2477. await observer.OnCompletedAsync().ConfigureAwait(false);
  2478. }
  2479. }
  2480. }
  2481. );
  2482. return
  2483. (
  2484. CreateObserver<T1>(1, values1),
  2485. CreateObserver<T2>(2, values2),
  2486. CreateObserver<T3>(3, values3),
  2487. CreateObserver<T4>(4, values4),
  2488. CreateObserver<T5>(5, values5),
  2489. CreateObserver<T6>(6, values6),
  2490. CreateObserver<T7>(7, values7)
  2491. );
  2492. }
  2493. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>) Zip<T1, T2, T3, T4, T5, T6, T7, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, TResult> selector)
  2494. {
  2495. if (observer == null)
  2496. throw new ArgumentNullException(nameof(observer));
  2497. if (selector == null)
  2498. throw new ArgumentNullException(nameof(selector));
  2499. return Zip<T1, T2, T3, T4, T5, T6, T7, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7)));
  2500. }
  2501. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>) Zip<T1, T2, T3, T4, T5, T6, T7, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, Task<TResult>> selector)
  2502. {
  2503. if (observer == null)
  2504. throw new ArgumentNullException(nameof(observer));
  2505. if (selector == null)
  2506. throw new ArgumentNullException(nameof(selector));
  2507. var gate = new AsyncLock();
  2508. var values1 = new Queue<T1>();
  2509. var values2 = new Queue<T2>();
  2510. var values3 = new Queue<T3>();
  2511. var values4 = new Queue<T4>();
  2512. var values5 = new Queue<T5>();
  2513. var values6 = new Queue<T6>();
  2514. var values7 = new Queue<T7>();
  2515. var isDone = new bool[7];
  2516. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2517. Create<T>(
  2518. async x =>
  2519. {
  2520. using (await gate.LockAsync().ConfigureAwait(false))
  2521. {
  2522. queue.Enqueue(x);
  2523. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0)
  2524. {
  2525. TResult res;
  2526. try
  2527. {
  2528. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue()).ConfigureAwait(false);
  2529. }
  2530. catch (Exception ex)
  2531. {
  2532. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2533. return;
  2534. }
  2535. await observer.OnNextAsync(res).ConfigureAwait(false);
  2536. }
  2537. else
  2538. {
  2539. var allDone = true;
  2540. for (var i = 0; i < 7; i++)
  2541. {
  2542. if (i != index && !isDone[i])
  2543. {
  2544. allDone = false;
  2545. break;
  2546. }
  2547. }
  2548. if (allDone)
  2549. {
  2550. await observer.OnCompletedAsync().ConfigureAwait(false);
  2551. }
  2552. }
  2553. }
  2554. },
  2555. async ex =>
  2556. {
  2557. using (await gate.LockAsync().ConfigureAwait(false))
  2558. {
  2559. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2560. }
  2561. },
  2562. async () =>
  2563. {
  2564. using (await gate.LockAsync().ConfigureAwait(false))
  2565. {
  2566. isDone[index] = true;
  2567. var allDone = true;
  2568. for (var i = 0; i < 7; i++)
  2569. {
  2570. if (!isDone[i])
  2571. {
  2572. allDone = false;
  2573. break;
  2574. }
  2575. }
  2576. if (allDone)
  2577. {
  2578. await observer.OnCompletedAsync().ConfigureAwait(false);
  2579. }
  2580. }
  2581. }
  2582. );
  2583. return
  2584. (
  2585. CreateObserver<T1>(1, values1),
  2586. CreateObserver<T2>(2, values2),
  2587. CreateObserver<T3>(3, values3),
  2588. CreateObserver<T4>(4, values4),
  2589. CreateObserver<T5>(5, values5),
  2590. CreateObserver<T6>(6, values6),
  2591. CreateObserver<T7>(7, values7)
  2592. );
  2593. }
  2594. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>) Zip<T1, T2, T3, T4, T5, T6, T7, T8>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7, T8)> observer)
  2595. {
  2596. if (observer == null)
  2597. throw new ArgumentNullException(nameof(observer));
  2598. var gate = new AsyncLock();
  2599. var values1 = new Queue<T1>();
  2600. var values2 = new Queue<T2>();
  2601. var values3 = new Queue<T3>();
  2602. var values4 = new Queue<T4>();
  2603. var values5 = new Queue<T5>();
  2604. var values6 = new Queue<T6>();
  2605. var values7 = new Queue<T7>();
  2606. var values8 = new Queue<T8>();
  2607. var isDone = new bool[8];
  2608. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2609. Create<T>(
  2610. async x =>
  2611. {
  2612. using (await gate.LockAsync().ConfigureAwait(false))
  2613. {
  2614. queue.Enqueue(x);
  2615. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0)
  2616. {
  2617. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue())).ConfigureAwait(false);
  2618. }
  2619. else
  2620. {
  2621. var allDone = true;
  2622. for (var i = 0; i < 8; i++)
  2623. {
  2624. if (i != index && !isDone[i])
  2625. {
  2626. allDone = false;
  2627. break;
  2628. }
  2629. }
  2630. if (allDone)
  2631. {
  2632. await observer.OnCompletedAsync().ConfigureAwait(false);
  2633. }
  2634. }
  2635. }
  2636. },
  2637. async ex =>
  2638. {
  2639. using (await gate.LockAsync().ConfigureAwait(false))
  2640. {
  2641. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2642. }
  2643. },
  2644. async () =>
  2645. {
  2646. using (await gate.LockAsync().ConfigureAwait(false))
  2647. {
  2648. isDone[index] = true;
  2649. var allDone = true;
  2650. for (var i = 0; i < 8; i++)
  2651. {
  2652. if (!isDone[i])
  2653. {
  2654. allDone = false;
  2655. break;
  2656. }
  2657. }
  2658. if (allDone)
  2659. {
  2660. await observer.OnCompletedAsync().ConfigureAwait(false);
  2661. }
  2662. }
  2663. }
  2664. );
  2665. return
  2666. (
  2667. CreateObserver<T1>(1, values1),
  2668. CreateObserver<T2>(2, values2),
  2669. CreateObserver<T3>(3, values3),
  2670. CreateObserver<T4>(4, values4),
  2671. CreateObserver<T5>(5, values5),
  2672. CreateObserver<T6>(6, values6),
  2673. CreateObserver<T7>(7, values7),
  2674. CreateObserver<T8>(8, values8)
  2675. );
  2676. }
  2677. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> selector)
  2678. {
  2679. if (observer == null)
  2680. throw new ArgumentNullException(nameof(observer));
  2681. if (selector == null)
  2682. throw new ArgumentNullException(nameof(selector));
  2683. return Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7, x8) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7, x8)));
  2684. }
  2685. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, Task<TResult>> selector)
  2686. {
  2687. if (observer == null)
  2688. throw new ArgumentNullException(nameof(observer));
  2689. if (selector == null)
  2690. throw new ArgumentNullException(nameof(selector));
  2691. var gate = new AsyncLock();
  2692. var values1 = new Queue<T1>();
  2693. var values2 = new Queue<T2>();
  2694. var values3 = new Queue<T3>();
  2695. var values4 = new Queue<T4>();
  2696. var values5 = new Queue<T5>();
  2697. var values6 = new Queue<T6>();
  2698. var values7 = new Queue<T7>();
  2699. var values8 = new Queue<T8>();
  2700. var isDone = new bool[8];
  2701. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2702. Create<T>(
  2703. async x =>
  2704. {
  2705. using (await gate.LockAsync().ConfigureAwait(false))
  2706. {
  2707. queue.Enqueue(x);
  2708. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0)
  2709. {
  2710. TResult res;
  2711. try
  2712. {
  2713. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue()).ConfigureAwait(false);
  2714. }
  2715. catch (Exception ex)
  2716. {
  2717. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2718. return;
  2719. }
  2720. await observer.OnNextAsync(res).ConfigureAwait(false);
  2721. }
  2722. else
  2723. {
  2724. var allDone = true;
  2725. for (var i = 0; i < 8; i++)
  2726. {
  2727. if (i != index && !isDone[i])
  2728. {
  2729. allDone = false;
  2730. break;
  2731. }
  2732. }
  2733. if (allDone)
  2734. {
  2735. await observer.OnCompletedAsync().ConfigureAwait(false);
  2736. }
  2737. }
  2738. }
  2739. },
  2740. async ex =>
  2741. {
  2742. using (await gate.LockAsync().ConfigureAwait(false))
  2743. {
  2744. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2745. }
  2746. },
  2747. async () =>
  2748. {
  2749. using (await gate.LockAsync().ConfigureAwait(false))
  2750. {
  2751. isDone[index] = true;
  2752. var allDone = true;
  2753. for (var i = 0; i < 8; i++)
  2754. {
  2755. if (!isDone[i])
  2756. {
  2757. allDone = false;
  2758. break;
  2759. }
  2760. }
  2761. if (allDone)
  2762. {
  2763. await observer.OnCompletedAsync().ConfigureAwait(false);
  2764. }
  2765. }
  2766. }
  2767. );
  2768. return
  2769. (
  2770. CreateObserver<T1>(1, values1),
  2771. CreateObserver<T2>(2, values2),
  2772. CreateObserver<T3>(3, values3),
  2773. CreateObserver<T4>(4, values4),
  2774. CreateObserver<T5>(5, values5),
  2775. CreateObserver<T6>(6, values6),
  2776. CreateObserver<T7>(7, values7),
  2777. CreateObserver<T8>(8, values8)
  2778. );
  2779. }
  2780. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7, T8, T9)> observer)
  2781. {
  2782. if (observer == null)
  2783. throw new ArgumentNullException(nameof(observer));
  2784. var gate = new AsyncLock();
  2785. var values1 = new Queue<T1>();
  2786. var values2 = new Queue<T2>();
  2787. var values3 = new Queue<T3>();
  2788. var values4 = new Queue<T4>();
  2789. var values5 = new Queue<T5>();
  2790. var values6 = new Queue<T6>();
  2791. var values7 = new Queue<T7>();
  2792. var values8 = new Queue<T8>();
  2793. var values9 = new Queue<T9>();
  2794. var isDone = new bool[9];
  2795. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2796. Create<T>(
  2797. async x =>
  2798. {
  2799. using (await gate.LockAsync().ConfigureAwait(false))
  2800. {
  2801. queue.Enqueue(x);
  2802. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0)
  2803. {
  2804. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue())).ConfigureAwait(false);
  2805. }
  2806. else
  2807. {
  2808. var allDone = true;
  2809. for (var i = 0; i < 9; i++)
  2810. {
  2811. if (i != index && !isDone[i])
  2812. {
  2813. allDone = false;
  2814. break;
  2815. }
  2816. }
  2817. if (allDone)
  2818. {
  2819. await observer.OnCompletedAsync().ConfigureAwait(false);
  2820. }
  2821. }
  2822. }
  2823. },
  2824. async ex =>
  2825. {
  2826. using (await gate.LockAsync().ConfigureAwait(false))
  2827. {
  2828. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2829. }
  2830. },
  2831. async () =>
  2832. {
  2833. using (await gate.LockAsync().ConfigureAwait(false))
  2834. {
  2835. isDone[index] = true;
  2836. var allDone = true;
  2837. for (var i = 0; i < 9; i++)
  2838. {
  2839. if (!isDone[i])
  2840. {
  2841. allDone = false;
  2842. break;
  2843. }
  2844. }
  2845. if (allDone)
  2846. {
  2847. await observer.OnCompletedAsync().ConfigureAwait(false);
  2848. }
  2849. }
  2850. }
  2851. );
  2852. return
  2853. (
  2854. CreateObserver<T1>(1, values1),
  2855. CreateObserver<T2>(2, values2),
  2856. CreateObserver<T3>(3, values3),
  2857. CreateObserver<T4>(4, values4),
  2858. CreateObserver<T5>(5, values5),
  2859. CreateObserver<T6>(6, values6),
  2860. CreateObserver<T7>(7, values7),
  2861. CreateObserver<T8>(8, values8),
  2862. CreateObserver<T9>(9, values9)
  2863. );
  2864. }
  2865. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> selector)
  2866. {
  2867. if (observer == null)
  2868. throw new ArgumentNullException(nameof(observer));
  2869. if (selector == null)
  2870. throw new ArgumentNullException(nameof(selector));
  2871. return Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7, x8, x9) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7, x8, x9)));
  2872. }
  2873. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, Task<TResult>> selector)
  2874. {
  2875. if (observer == null)
  2876. throw new ArgumentNullException(nameof(observer));
  2877. if (selector == null)
  2878. throw new ArgumentNullException(nameof(selector));
  2879. var gate = new AsyncLock();
  2880. var values1 = new Queue<T1>();
  2881. var values2 = new Queue<T2>();
  2882. var values3 = new Queue<T3>();
  2883. var values4 = new Queue<T4>();
  2884. var values5 = new Queue<T5>();
  2885. var values6 = new Queue<T6>();
  2886. var values7 = new Queue<T7>();
  2887. var values8 = new Queue<T8>();
  2888. var values9 = new Queue<T9>();
  2889. var isDone = new bool[9];
  2890. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2891. Create<T>(
  2892. async x =>
  2893. {
  2894. using (await gate.LockAsync().ConfigureAwait(false))
  2895. {
  2896. queue.Enqueue(x);
  2897. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0)
  2898. {
  2899. TResult res;
  2900. try
  2901. {
  2902. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue()).ConfigureAwait(false);
  2903. }
  2904. catch (Exception ex)
  2905. {
  2906. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2907. return;
  2908. }
  2909. await observer.OnNextAsync(res).ConfigureAwait(false);
  2910. }
  2911. else
  2912. {
  2913. var allDone = true;
  2914. for (var i = 0; i < 9; i++)
  2915. {
  2916. if (i != index && !isDone[i])
  2917. {
  2918. allDone = false;
  2919. break;
  2920. }
  2921. }
  2922. if (allDone)
  2923. {
  2924. await observer.OnCompletedAsync().ConfigureAwait(false);
  2925. }
  2926. }
  2927. }
  2928. },
  2929. async ex =>
  2930. {
  2931. using (await gate.LockAsync().ConfigureAwait(false))
  2932. {
  2933. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  2934. }
  2935. },
  2936. async () =>
  2937. {
  2938. using (await gate.LockAsync().ConfigureAwait(false))
  2939. {
  2940. isDone[index] = true;
  2941. var allDone = true;
  2942. for (var i = 0; i < 9; i++)
  2943. {
  2944. if (!isDone[i])
  2945. {
  2946. allDone = false;
  2947. break;
  2948. }
  2949. }
  2950. if (allDone)
  2951. {
  2952. await observer.OnCompletedAsync().ConfigureAwait(false);
  2953. }
  2954. }
  2955. }
  2956. );
  2957. return
  2958. (
  2959. CreateObserver<T1>(1, values1),
  2960. CreateObserver<T2>(2, values2),
  2961. CreateObserver<T3>(3, values3),
  2962. CreateObserver<T4>(4, values4),
  2963. CreateObserver<T5>(5, values5),
  2964. CreateObserver<T6>(6, values6),
  2965. CreateObserver<T7>(7, values7),
  2966. CreateObserver<T8>(8, values8),
  2967. CreateObserver<T9>(9, values9)
  2968. );
  2969. }
  2970. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)> observer)
  2971. {
  2972. if (observer == null)
  2973. throw new ArgumentNullException(nameof(observer));
  2974. var gate = new AsyncLock();
  2975. var values1 = new Queue<T1>();
  2976. var values2 = new Queue<T2>();
  2977. var values3 = new Queue<T3>();
  2978. var values4 = new Queue<T4>();
  2979. var values5 = new Queue<T5>();
  2980. var values6 = new Queue<T6>();
  2981. var values7 = new Queue<T7>();
  2982. var values8 = new Queue<T8>();
  2983. var values9 = new Queue<T9>();
  2984. var values10 = new Queue<T10>();
  2985. var isDone = new bool[10];
  2986. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  2987. Create<T>(
  2988. async x =>
  2989. {
  2990. using (await gate.LockAsync().ConfigureAwait(false))
  2991. {
  2992. queue.Enqueue(x);
  2993. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0)
  2994. {
  2995. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue())).ConfigureAwait(false);
  2996. }
  2997. else
  2998. {
  2999. var allDone = true;
  3000. for (var i = 0; i < 10; i++)
  3001. {
  3002. if (i != index && !isDone[i])
  3003. {
  3004. allDone = false;
  3005. break;
  3006. }
  3007. }
  3008. if (allDone)
  3009. {
  3010. await observer.OnCompletedAsync().ConfigureAwait(false);
  3011. }
  3012. }
  3013. }
  3014. },
  3015. async ex =>
  3016. {
  3017. using (await gate.LockAsync().ConfigureAwait(false))
  3018. {
  3019. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3020. }
  3021. },
  3022. async () =>
  3023. {
  3024. using (await gate.LockAsync().ConfigureAwait(false))
  3025. {
  3026. isDone[index] = true;
  3027. var allDone = true;
  3028. for (var i = 0; i < 10; i++)
  3029. {
  3030. if (!isDone[i])
  3031. {
  3032. allDone = false;
  3033. break;
  3034. }
  3035. }
  3036. if (allDone)
  3037. {
  3038. await observer.OnCompletedAsync().ConfigureAwait(false);
  3039. }
  3040. }
  3041. }
  3042. );
  3043. return
  3044. (
  3045. CreateObserver<T1>(1, values1),
  3046. CreateObserver<T2>(2, values2),
  3047. CreateObserver<T3>(3, values3),
  3048. CreateObserver<T4>(4, values4),
  3049. CreateObserver<T5>(5, values5),
  3050. CreateObserver<T6>(6, values6),
  3051. CreateObserver<T7>(7, values7),
  3052. CreateObserver<T8>(8, values8),
  3053. CreateObserver<T9>(9, values9),
  3054. CreateObserver<T10>(10, values10)
  3055. );
  3056. }
  3057. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> selector)
  3058. {
  3059. if (observer == null)
  3060. throw new ArgumentNullException(nameof(observer));
  3061. if (selector == null)
  3062. throw new ArgumentNullException(nameof(selector));
  3063. return Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)));
  3064. }
  3065. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, Task<TResult>> selector)
  3066. {
  3067. if (observer == null)
  3068. throw new ArgumentNullException(nameof(observer));
  3069. if (selector == null)
  3070. throw new ArgumentNullException(nameof(selector));
  3071. var gate = new AsyncLock();
  3072. var values1 = new Queue<T1>();
  3073. var values2 = new Queue<T2>();
  3074. var values3 = new Queue<T3>();
  3075. var values4 = new Queue<T4>();
  3076. var values5 = new Queue<T5>();
  3077. var values6 = new Queue<T6>();
  3078. var values7 = new Queue<T7>();
  3079. var values8 = new Queue<T8>();
  3080. var values9 = new Queue<T9>();
  3081. var values10 = new Queue<T10>();
  3082. var isDone = new bool[10];
  3083. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3084. Create<T>(
  3085. async x =>
  3086. {
  3087. using (await gate.LockAsync().ConfigureAwait(false))
  3088. {
  3089. queue.Enqueue(x);
  3090. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0)
  3091. {
  3092. TResult res;
  3093. try
  3094. {
  3095. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue()).ConfigureAwait(false);
  3096. }
  3097. catch (Exception ex)
  3098. {
  3099. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3100. return;
  3101. }
  3102. await observer.OnNextAsync(res).ConfigureAwait(false);
  3103. }
  3104. else
  3105. {
  3106. var allDone = true;
  3107. for (var i = 0; i < 10; i++)
  3108. {
  3109. if (i != index && !isDone[i])
  3110. {
  3111. allDone = false;
  3112. break;
  3113. }
  3114. }
  3115. if (allDone)
  3116. {
  3117. await observer.OnCompletedAsync().ConfigureAwait(false);
  3118. }
  3119. }
  3120. }
  3121. },
  3122. async ex =>
  3123. {
  3124. using (await gate.LockAsync().ConfigureAwait(false))
  3125. {
  3126. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3127. }
  3128. },
  3129. async () =>
  3130. {
  3131. using (await gate.LockAsync().ConfigureAwait(false))
  3132. {
  3133. isDone[index] = true;
  3134. var allDone = true;
  3135. for (var i = 0; i < 10; i++)
  3136. {
  3137. if (!isDone[i])
  3138. {
  3139. allDone = false;
  3140. break;
  3141. }
  3142. }
  3143. if (allDone)
  3144. {
  3145. await observer.OnCompletedAsync().ConfigureAwait(false);
  3146. }
  3147. }
  3148. }
  3149. );
  3150. return
  3151. (
  3152. CreateObserver<T1>(1, values1),
  3153. CreateObserver<T2>(2, values2),
  3154. CreateObserver<T3>(3, values3),
  3155. CreateObserver<T4>(4, values4),
  3156. CreateObserver<T5>(5, values5),
  3157. CreateObserver<T6>(6, values6),
  3158. CreateObserver<T7>(7, values7),
  3159. CreateObserver<T8>(8, values8),
  3160. CreateObserver<T9>(9, values9),
  3161. CreateObserver<T10>(10, values10)
  3162. );
  3163. }
  3164. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)> observer)
  3165. {
  3166. if (observer == null)
  3167. throw new ArgumentNullException(nameof(observer));
  3168. var gate = new AsyncLock();
  3169. var values1 = new Queue<T1>();
  3170. var values2 = new Queue<T2>();
  3171. var values3 = new Queue<T3>();
  3172. var values4 = new Queue<T4>();
  3173. var values5 = new Queue<T5>();
  3174. var values6 = new Queue<T6>();
  3175. var values7 = new Queue<T7>();
  3176. var values8 = new Queue<T8>();
  3177. var values9 = new Queue<T9>();
  3178. var values10 = new Queue<T10>();
  3179. var values11 = new Queue<T11>();
  3180. var isDone = new bool[11];
  3181. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3182. Create<T>(
  3183. async x =>
  3184. {
  3185. using (await gate.LockAsync().ConfigureAwait(false))
  3186. {
  3187. queue.Enqueue(x);
  3188. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0)
  3189. {
  3190. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue())).ConfigureAwait(false);
  3191. }
  3192. else
  3193. {
  3194. var allDone = true;
  3195. for (var i = 0; i < 11; i++)
  3196. {
  3197. if (i != index && !isDone[i])
  3198. {
  3199. allDone = false;
  3200. break;
  3201. }
  3202. }
  3203. if (allDone)
  3204. {
  3205. await observer.OnCompletedAsync().ConfigureAwait(false);
  3206. }
  3207. }
  3208. }
  3209. },
  3210. async ex =>
  3211. {
  3212. using (await gate.LockAsync().ConfigureAwait(false))
  3213. {
  3214. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3215. }
  3216. },
  3217. async () =>
  3218. {
  3219. using (await gate.LockAsync().ConfigureAwait(false))
  3220. {
  3221. isDone[index] = true;
  3222. var allDone = true;
  3223. for (var i = 0; i < 11; i++)
  3224. {
  3225. if (!isDone[i])
  3226. {
  3227. allDone = false;
  3228. break;
  3229. }
  3230. }
  3231. if (allDone)
  3232. {
  3233. await observer.OnCompletedAsync().ConfigureAwait(false);
  3234. }
  3235. }
  3236. }
  3237. );
  3238. return
  3239. (
  3240. CreateObserver<T1>(1, values1),
  3241. CreateObserver<T2>(2, values2),
  3242. CreateObserver<T3>(3, values3),
  3243. CreateObserver<T4>(4, values4),
  3244. CreateObserver<T5>(5, values5),
  3245. CreateObserver<T6>(6, values6),
  3246. CreateObserver<T7>(7, values7),
  3247. CreateObserver<T8>(8, values8),
  3248. CreateObserver<T9>(9, values9),
  3249. CreateObserver<T10>(10, values10),
  3250. CreateObserver<T11>(11, values11)
  3251. );
  3252. }
  3253. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> selector)
  3254. {
  3255. if (observer == null)
  3256. throw new ArgumentNullException(nameof(observer));
  3257. if (selector == null)
  3258. throw new ArgumentNullException(nameof(selector));
  3259. return Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11)));
  3260. }
  3261. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, Task<TResult>> selector)
  3262. {
  3263. if (observer == null)
  3264. throw new ArgumentNullException(nameof(observer));
  3265. if (selector == null)
  3266. throw new ArgumentNullException(nameof(selector));
  3267. var gate = new AsyncLock();
  3268. var values1 = new Queue<T1>();
  3269. var values2 = new Queue<T2>();
  3270. var values3 = new Queue<T3>();
  3271. var values4 = new Queue<T4>();
  3272. var values5 = new Queue<T5>();
  3273. var values6 = new Queue<T6>();
  3274. var values7 = new Queue<T7>();
  3275. var values8 = new Queue<T8>();
  3276. var values9 = new Queue<T9>();
  3277. var values10 = new Queue<T10>();
  3278. var values11 = new Queue<T11>();
  3279. var isDone = new bool[11];
  3280. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3281. Create<T>(
  3282. async x =>
  3283. {
  3284. using (await gate.LockAsync().ConfigureAwait(false))
  3285. {
  3286. queue.Enqueue(x);
  3287. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0)
  3288. {
  3289. TResult res;
  3290. try
  3291. {
  3292. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue()).ConfigureAwait(false);
  3293. }
  3294. catch (Exception ex)
  3295. {
  3296. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3297. return;
  3298. }
  3299. await observer.OnNextAsync(res).ConfigureAwait(false);
  3300. }
  3301. else
  3302. {
  3303. var allDone = true;
  3304. for (var i = 0; i < 11; i++)
  3305. {
  3306. if (i != index && !isDone[i])
  3307. {
  3308. allDone = false;
  3309. break;
  3310. }
  3311. }
  3312. if (allDone)
  3313. {
  3314. await observer.OnCompletedAsync().ConfigureAwait(false);
  3315. }
  3316. }
  3317. }
  3318. },
  3319. async ex =>
  3320. {
  3321. using (await gate.LockAsync().ConfigureAwait(false))
  3322. {
  3323. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3324. }
  3325. },
  3326. async () =>
  3327. {
  3328. using (await gate.LockAsync().ConfigureAwait(false))
  3329. {
  3330. isDone[index] = true;
  3331. var allDone = true;
  3332. for (var i = 0; i < 11; i++)
  3333. {
  3334. if (!isDone[i])
  3335. {
  3336. allDone = false;
  3337. break;
  3338. }
  3339. }
  3340. if (allDone)
  3341. {
  3342. await observer.OnCompletedAsync().ConfigureAwait(false);
  3343. }
  3344. }
  3345. }
  3346. );
  3347. return
  3348. (
  3349. CreateObserver<T1>(1, values1),
  3350. CreateObserver<T2>(2, values2),
  3351. CreateObserver<T3>(3, values3),
  3352. CreateObserver<T4>(4, values4),
  3353. CreateObserver<T5>(5, values5),
  3354. CreateObserver<T6>(6, values6),
  3355. CreateObserver<T7>(7, values7),
  3356. CreateObserver<T8>(8, values8),
  3357. CreateObserver<T9>(9, values9),
  3358. CreateObserver<T10>(10, values10),
  3359. CreateObserver<T11>(11, values11)
  3360. );
  3361. }
  3362. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)> observer)
  3363. {
  3364. if (observer == null)
  3365. throw new ArgumentNullException(nameof(observer));
  3366. var gate = new AsyncLock();
  3367. var values1 = new Queue<T1>();
  3368. var values2 = new Queue<T2>();
  3369. var values3 = new Queue<T3>();
  3370. var values4 = new Queue<T4>();
  3371. var values5 = new Queue<T5>();
  3372. var values6 = new Queue<T6>();
  3373. var values7 = new Queue<T7>();
  3374. var values8 = new Queue<T8>();
  3375. var values9 = new Queue<T9>();
  3376. var values10 = new Queue<T10>();
  3377. var values11 = new Queue<T11>();
  3378. var values12 = new Queue<T12>();
  3379. var isDone = new bool[12];
  3380. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3381. Create<T>(
  3382. async x =>
  3383. {
  3384. using (await gate.LockAsync().ConfigureAwait(false))
  3385. {
  3386. queue.Enqueue(x);
  3387. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0 && values12.Count > 0)
  3388. {
  3389. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue(), values12.Dequeue())).ConfigureAwait(false);
  3390. }
  3391. else
  3392. {
  3393. var allDone = true;
  3394. for (var i = 0; i < 12; i++)
  3395. {
  3396. if (i != index && !isDone[i])
  3397. {
  3398. allDone = false;
  3399. break;
  3400. }
  3401. }
  3402. if (allDone)
  3403. {
  3404. await observer.OnCompletedAsync().ConfigureAwait(false);
  3405. }
  3406. }
  3407. }
  3408. },
  3409. async ex =>
  3410. {
  3411. using (await gate.LockAsync().ConfigureAwait(false))
  3412. {
  3413. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3414. }
  3415. },
  3416. async () =>
  3417. {
  3418. using (await gate.LockAsync().ConfigureAwait(false))
  3419. {
  3420. isDone[index] = true;
  3421. var allDone = true;
  3422. for (var i = 0; i < 12; i++)
  3423. {
  3424. if (!isDone[i])
  3425. {
  3426. allDone = false;
  3427. break;
  3428. }
  3429. }
  3430. if (allDone)
  3431. {
  3432. await observer.OnCompletedAsync().ConfigureAwait(false);
  3433. }
  3434. }
  3435. }
  3436. );
  3437. return
  3438. (
  3439. CreateObserver<T1>(1, values1),
  3440. CreateObserver<T2>(2, values2),
  3441. CreateObserver<T3>(3, values3),
  3442. CreateObserver<T4>(4, values4),
  3443. CreateObserver<T5>(5, values5),
  3444. CreateObserver<T6>(6, values6),
  3445. CreateObserver<T7>(7, values7),
  3446. CreateObserver<T8>(8, values8),
  3447. CreateObserver<T9>(9, values9),
  3448. CreateObserver<T10>(10, values10),
  3449. CreateObserver<T11>(11, values11),
  3450. CreateObserver<T12>(12, values12)
  3451. );
  3452. }
  3453. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> selector)
  3454. {
  3455. if (observer == null)
  3456. throw new ArgumentNullException(nameof(observer));
  3457. if (selector == null)
  3458. throw new ArgumentNullException(nameof(selector));
  3459. return Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12)));
  3460. }
  3461. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, Task<TResult>> selector)
  3462. {
  3463. if (observer == null)
  3464. throw new ArgumentNullException(nameof(observer));
  3465. if (selector == null)
  3466. throw new ArgumentNullException(nameof(selector));
  3467. var gate = new AsyncLock();
  3468. var values1 = new Queue<T1>();
  3469. var values2 = new Queue<T2>();
  3470. var values3 = new Queue<T3>();
  3471. var values4 = new Queue<T4>();
  3472. var values5 = new Queue<T5>();
  3473. var values6 = new Queue<T6>();
  3474. var values7 = new Queue<T7>();
  3475. var values8 = new Queue<T8>();
  3476. var values9 = new Queue<T9>();
  3477. var values10 = new Queue<T10>();
  3478. var values11 = new Queue<T11>();
  3479. var values12 = new Queue<T12>();
  3480. var isDone = new bool[12];
  3481. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3482. Create<T>(
  3483. async x =>
  3484. {
  3485. using (await gate.LockAsync().ConfigureAwait(false))
  3486. {
  3487. queue.Enqueue(x);
  3488. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0 && values12.Count > 0)
  3489. {
  3490. TResult res;
  3491. try
  3492. {
  3493. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue(), values12.Dequeue()).ConfigureAwait(false);
  3494. }
  3495. catch (Exception ex)
  3496. {
  3497. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3498. return;
  3499. }
  3500. await observer.OnNextAsync(res).ConfigureAwait(false);
  3501. }
  3502. else
  3503. {
  3504. var allDone = true;
  3505. for (var i = 0; i < 12; i++)
  3506. {
  3507. if (i != index && !isDone[i])
  3508. {
  3509. allDone = false;
  3510. break;
  3511. }
  3512. }
  3513. if (allDone)
  3514. {
  3515. await observer.OnCompletedAsync().ConfigureAwait(false);
  3516. }
  3517. }
  3518. }
  3519. },
  3520. async ex =>
  3521. {
  3522. using (await gate.LockAsync().ConfigureAwait(false))
  3523. {
  3524. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3525. }
  3526. },
  3527. async () =>
  3528. {
  3529. using (await gate.LockAsync().ConfigureAwait(false))
  3530. {
  3531. isDone[index] = true;
  3532. var allDone = true;
  3533. for (var i = 0; i < 12; i++)
  3534. {
  3535. if (!isDone[i])
  3536. {
  3537. allDone = false;
  3538. break;
  3539. }
  3540. }
  3541. if (allDone)
  3542. {
  3543. await observer.OnCompletedAsync().ConfigureAwait(false);
  3544. }
  3545. }
  3546. }
  3547. );
  3548. return
  3549. (
  3550. CreateObserver<T1>(1, values1),
  3551. CreateObserver<T2>(2, values2),
  3552. CreateObserver<T3>(3, values3),
  3553. CreateObserver<T4>(4, values4),
  3554. CreateObserver<T5>(5, values5),
  3555. CreateObserver<T6>(6, values6),
  3556. CreateObserver<T7>(7, values7),
  3557. CreateObserver<T8>(8, values8),
  3558. CreateObserver<T9>(9, values9),
  3559. CreateObserver<T10>(10, values10),
  3560. CreateObserver<T11>(11, values11),
  3561. CreateObserver<T12>(12, values12)
  3562. );
  3563. }
  3564. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)> observer)
  3565. {
  3566. if (observer == null)
  3567. throw new ArgumentNullException(nameof(observer));
  3568. var gate = new AsyncLock();
  3569. var values1 = new Queue<T1>();
  3570. var values2 = new Queue<T2>();
  3571. var values3 = new Queue<T3>();
  3572. var values4 = new Queue<T4>();
  3573. var values5 = new Queue<T5>();
  3574. var values6 = new Queue<T6>();
  3575. var values7 = new Queue<T7>();
  3576. var values8 = new Queue<T8>();
  3577. var values9 = new Queue<T9>();
  3578. var values10 = new Queue<T10>();
  3579. var values11 = new Queue<T11>();
  3580. var values12 = new Queue<T12>();
  3581. var values13 = new Queue<T13>();
  3582. var isDone = new bool[13];
  3583. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3584. Create<T>(
  3585. async x =>
  3586. {
  3587. using (await gate.LockAsync().ConfigureAwait(false))
  3588. {
  3589. queue.Enqueue(x);
  3590. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0 && values12.Count > 0 && values13.Count > 0)
  3591. {
  3592. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue(), values12.Dequeue(), values13.Dequeue())).ConfigureAwait(false);
  3593. }
  3594. else
  3595. {
  3596. var allDone = true;
  3597. for (var i = 0; i < 13; i++)
  3598. {
  3599. if (i != index && !isDone[i])
  3600. {
  3601. allDone = false;
  3602. break;
  3603. }
  3604. }
  3605. if (allDone)
  3606. {
  3607. await observer.OnCompletedAsync().ConfigureAwait(false);
  3608. }
  3609. }
  3610. }
  3611. },
  3612. async ex =>
  3613. {
  3614. using (await gate.LockAsync().ConfigureAwait(false))
  3615. {
  3616. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3617. }
  3618. },
  3619. async () =>
  3620. {
  3621. using (await gate.LockAsync().ConfigureAwait(false))
  3622. {
  3623. isDone[index] = true;
  3624. var allDone = true;
  3625. for (var i = 0; i < 13; i++)
  3626. {
  3627. if (!isDone[i])
  3628. {
  3629. allDone = false;
  3630. break;
  3631. }
  3632. }
  3633. if (allDone)
  3634. {
  3635. await observer.OnCompletedAsync().ConfigureAwait(false);
  3636. }
  3637. }
  3638. }
  3639. );
  3640. return
  3641. (
  3642. CreateObserver<T1>(1, values1),
  3643. CreateObserver<T2>(2, values2),
  3644. CreateObserver<T3>(3, values3),
  3645. CreateObserver<T4>(4, values4),
  3646. CreateObserver<T5>(5, values5),
  3647. CreateObserver<T6>(6, values6),
  3648. CreateObserver<T7>(7, values7),
  3649. CreateObserver<T8>(8, values8),
  3650. CreateObserver<T9>(9, values9),
  3651. CreateObserver<T10>(10, values10),
  3652. CreateObserver<T11>(11, values11),
  3653. CreateObserver<T12>(12, values12),
  3654. CreateObserver<T13>(13, values13)
  3655. );
  3656. }
  3657. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> selector)
  3658. {
  3659. if (observer == null)
  3660. throw new ArgumentNullException(nameof(observer));
  3661. if (selector == null)
  3662. throw new ArgumentNullException(nameof(selector));
  3663. return Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13)));
  3664. }
  3665. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Task<TResult>> selector)
  3666. {
  3667. if (observer == null)
  3668. throw new ArgumentNullException(nameof(observer));
  3669. if (selector == null)
  3670. throw new ArgumentNullException(nameof(selector));
  3671. var gate = new AsyncLock();
  3672. var values1 = new Queue<T1>();
  3673. var values2 = new Queue<T2>();
  3674. var values3 = new Queue<T3>();
  3675. var values4 = new Queue<T4>();
  3676. var values5 = new Queue<T5>();
  3677. var values6 = new Queue<T6>();
  3678. var values7 = new Queue<T7>();
  3679. var values8 = new Queue<T8>();
  3680. var values9 = new Queue<T9>();
  3681. var values10 = new Queue<T10>();
  3682. var values11 = new Queue<T11>();
  3683. var values12 = new Queue<T12>();
  3684. var values13 = new Queue<T13>();
  3685. var isDone = new bool[13];
  3686. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3687. Create<T>(
  3688. async x =>
  3689. {
  3690. using (await gate.LockAsync().ConfigureAwait(false))
  3691. {
  3692. queue.Enqueue(x);
  3693. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0 && values12.Count > 0 && values13.Count > 0)
  3694. {
  3695. TResult res;
  3696. try
  3697. {
  3698. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue(), values12.Dequeue(), values13.Dequeue()).ConfigureAwait(false);
  3699. }
  3700. catch (Exception ex)
  3701. {
  3702. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3703. return;
  3704. }
  3705. await observer.OnNextAsync(res).ConfigureAwait(false);
  3706. }
  3707. else
  3708. {
  3709. var allDone = true;
  3710. for (var i = 0; i < 13; i++)
  3711. {
  3712. if (i != index && !isDone[i])
  3713. {
  3714. allDone = false;
  3715. break;
  3716. }
  3717. }
  3718. if (allDone)
  3719. {
  3720. await observer.OnCompletedAsync().ConfigureAwait(false);
  3721. }
  3722. }
  3723. }
  3724. },
  3725. async ex =>
  3726. {
  3727. using (await gate.LockAsync().ConfigureAwait(false))
  3728. {
  3729. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3730. }
  3731. },
  3732. async () =>
  3733. {
  3734. using (await gate.LockAsync().ConfigureAwait(false))
  3735. {
  3736. isDone[index] = true;
  3737. var allDone = true;
  3738. for (var i = 0; i < 13; i++)
  3739. {
  3740. if (!isDone[i])
  3741. {
  3742. allDone = false;
  3743. break;
  3744. }
  3745. }
  3746. if (allDone)
  3747. {
  3748. await observer.OnCompletedAsync().ConfigureAwait(false);
  3749. }
  3750. }
  3751. }
  3752. );
  3753. return
  3754. (
  3755. CreateObserver<T1>(1, values1),
  3756. CreateObserver<T2>(2, values2),
  3757. CreateObserver<T3>(3, values3),
  3758. CreateObserver<T4>(4, values4),
  3759. CreateObserver<T5>(5, values5),
  3760. CreateObserver<T6>(6, values6),
  3761. CreateObserver<T7>(7, values7),
  3762. CreateObserver<T8>(8, values8),
  3763. CreateObserver<T9>(9, values9),
  3764. CreateObserver<T10>(10, values10),
  3765. CreateObserver<T11>(11, values11),
  3766. CreateObserver<T12>(12, values12),
  3767. CreateObserver<T13>(13, values13)
  3768. );
  3769. }
  3770. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>, IAsyncObserver<T14>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)> observer)
  3771. {
  3772. if (observer == null)
  3773. throw new ArgumentNullException(nameof(observer));
  3774. var gate = new AsyncLock();
  3775. var values1 = new Queue<T1>();
  3776. var values2 = new Queue<T2>();
  3777. var values3 = new Queue<T3>();
  3778. var values4 = new Queue<T4>();
  3779. var values5 = new Queue<T5>();
  3780. var values6 = new Queue<T6>();
  3781. var values7 = new Queue<T7>();
  3782. var values8 = new Queue<T8>();
  3783. var values9 = new Queue<T9>();
  3784. var values10 = new Queue<T10>();
  3785. var values11 = new Queue<T11>();
  3786. var values12 = new Queue<T12>();
  3787. var values13 = new Queue<T13>();
  3788. var values14 = new Queue<T14>();
  3789. var isDone = new bool[14];
  3790. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3791. Create<T>(
  3792. async x =>
  3793. {
  3794. using (await gate.LockAsync().ConfigureAwait(false))
  3795. {
  3796. queue.Enqueue(x);
  3797. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0 && values12.Count > 0 && values13.Count > 0 && values14.Count > 0)
  3798. {
  3799. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue(), values12.Dequeue(), values13.Dequeue(), values14.Dequeue())).ConfigureAwait(false);
  3800. }
  3801. else
  3802. {
  3803. var allDone = true;
  3804. for (var i = 0; i < 14; i++)
  3805. {
  3806. if (i != index && !isDone[i])
  3807. {
  3808. allDone = false;
  3809. break;
  3810. }
  3811. }
  3812. if (allDone)
  3813. {
  3814. await observer.OnCompletedAsync().ConfigureAwait(false);
  3815. }
  3816. }
  3817. }
  3818. },
  3819. async ex =>
  3820. {
  3821. using (await gate.LockAsync().ConfigureAwait(false))
  3822. {
  3823. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3824. }
  3825. },
  3826. async () =>
  3827. {
  3828. using (await gate.LockAsync().ConfigureAwait(false))
  3829. {
  3830. isDone[index] = true;
  3831. var allDone = true;
  3832. for (var i = 0; i < 14; i++)
  3833. {
  3834. if (!isDone[i])
  3835. {
  3836. allDone = false;
  3837. break;
  3838. }
  3839. }
  3840. if (allDone)
  3841. {
  3842. await observer.OnCompletedAsync().ConfigureAwait(false);
  3843. }
  3844. }
  3845. }
  3846. );
  3847. return
  3848. (
  3849. CreateObserver<T1>(1, values1),
  3850. CreateObserver<T2>(2, values2),
  3851. CreateObserver<T3>(3, values3),
  3852. CreateObserver<T4>(4, values4),
  3853. CreateObserver<T5>(5, values5),
  3854. CreateObserver<T6>(6, values6),
  3855. CreateObserver<T7>(7, values7),
  3856. CreateObserver<T8>(8, values8),
  3857. CreateObserver<T9>(9, values9),
  3858. CreateObserver<T10>(10, values10),
  3859. CreateObserver<T11>(11, values11),
  3860. CreateObserver<T12>(12, values12),
  3861. CreateObserver<T13>(13, values13),
  3862. CreateObserver<T14>(14, values14)
  3863. );
  3864. }
  3865. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>, IAsyncObserver<T14>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> selector)
  3866. {
  3867. if (observer == null)
  3868. throw new ArgumentNullException(nameof(observer));
  3869. if (selector == null)
  3870. throw new ArgumentNullException(nameof(selector));
  3871. return Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14)));
  3872. }
  3873. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>, IAsyncObserver<T14>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, Task<TResult>> selector)
  3874. {
  3875. if (observer == null)
  3876. throw new ArgumentNullException(nameof(observer));
  3877. if (selector == null)
  3878. throw new ArgumentNullException(nameof(selector));
  3879. var gate = new AsyncLock();
  3880. var values1 = new Queue<T1>();
  3881. var values2 = new Queue<T2>();
  3882. var values3 = new Queue<T3>();
  3883. var values4 = new Queue<T4>();
  3884. var values5 = new Queue<T5>();
  3885. var values6 = new Queue<T6>();
  3886. var values7 = new Queue<T7>();
  3887. var values8 = new Queue<T8>();
  3888. var values9 = new Queue<T9>();
  3889. var values10 = new Queue<T10>();
  3890. var values11 = new Queue<T11>();
  3891. var values12 = new Queue<T12>();
  3892. var values13 = new Queue<T13>();
  3893. var values14 = new Queue<T14>();
  3894. var isDone = new bool[14];
  3895. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  3896. Create<T>(
  3897. async x =>
  3898. {
  3899. using (await gate.LockAsync().ConfigureAwait(false))
  3900. {
  3901. queue.Enqueue(x);
  3902. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0 && values12.Count > 0 && values13.Count > 0 && values14.Count > 0)
  3903. {
  3904. TResult res;
  3905. try
  3906. {
  3907. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue(), values12.Dequeue(), values13.Dequeue(), values14.Dequeue()).ConfigureAwait(false);
  3908. }
  3909. catch (Exception ex)
  3910. {
  3911. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3912. return;
  3913. }
  3914. await observer.OnNextAsync(res).ConfigureAwait(false);
  3915. }
  3916. else
  3917. {
  3918. var allDone = true;
  3919. for (var i = 0; i < 14; i++)
  3920. {
  3921. if (i != index && !isDone[i])
  3922. {
  3923. allDone = false;
  3924. break;
  3925. }
  3926. }
  3927. if (allDone)
  3928. {
  3929. await observer.OnCompletedAsync().ConfigureAwait(false);
  3930. }
  3931. }
  3932. }
  3933. },
  3934. async ex =>
  3935. {
  3936. using (await gate.LockAsync().ConfigureAwait(false))
  3937. {
  3938. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  3939. }
  3940. },
  3941. async () =>
  3942. {
  3943. using (await gate.LockAsync().ConfigureAwait(false))
  3944. {
  3945. isDone[index] = true;
  3946. var allDone = true;
  3947. for (var i = 0; i < 14; i++)
  3948. {
  3949. if (!isDone[i])
  3950. {
  3951. allDone = false;
  3952. break;
  3953. }
  3954. }
  3955. if (allDone)
  3956. {
  3957. await observer.OnCompletedAsync().ConfigureAwait(false);
  3958. }
  3959. }
  3960. }
  3961. );
  3962. return
  3963. (
  3964. CreateObserver<T1>(1, values1),
  3965. CreateObserver<T2>(2, values2),
  3966. CreateObserver<T3>(3, values3),
  3967. CreateObserver<T4>(4, values4),
  3968. CreateObserver<T5>(5, values5),
  3969. CreateObserver<T6>(6, values6),
  3970. CreateObserver<T7>(7, values7),
  3971. CreateObserver<T8>(8, values8),
  3972. CreateObserver<T9>(9, values9),
  3973. CreateObserver<T10>(10, values10),
  3974. CreateObserver<T11>(11, values11),
  3975. CreateObserver<T12>(12, values12),
  3976. CreateObserver<T13>(13, values13),
  3977. CreateObserver<T14>(14, values14)
  3978. );
  3979. }
  3980. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>, IAsyncObserver<T14>, IAsyncObserver<T15>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(IAsyncObserver<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)> observer)
  3981. {
  3982. if (observer == null)
  3983. throw new ArgumentNullException(nameof(observer));
  3984. var gate = new AsyncLock();
  3985. var values1 = new Queue<T1>();
  3986. var values2 = new Queue<T2>();
  3987. var values3 = new Queue<T3>();
  3988. var values4 = new Queue<T4>();
  3989. var values5 = new Queue<T5>();
  3990. var values6 = new Queue<T6>();
  3991. var values7 = new Queue<T7>();
  3992. var values8 = new Queue<T8>();
  3993. var values9 = new Queue<T9>();
  3994. var values10 = new Queue<T10>();
  3995. var values11 = new Queue<T11>();
  3996. var values12 = new Queue<T12>();
  3997. var values13 = new Queue<T13>();
  3998. var values14 = new Queue<T14>();
  3999. var values15 = new Queue<T15>();
  4000. var isDone = new bool[15];
  4001. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  4002. Create<T>(
  4003. async x =>
  4004. {
  4005. using (await gate.LockAsync().ConfigureAwait(false))
  4006. {
  4007. queue.Enqueue(x);
  4008. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0 && values12.Count > 0 && values13.Count > 0 && values14.Count > 0 && values15.Count > 0)
  4009. {
  4010. await observer.OnNextAsync((values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue(), values12.Dequeue(), values13.Dequeue(), values14.Dequeue(), values15.Dequeue())).ConfigureAwait(false);
  4011. }
  4012. else
  4013. {
  4014. var allDone = true;
  4015. for (var i = 0; i < 15; i++)
  4016. {
  4017. if (i != index && !isDone[i])
  4018. {
  4019. allDone = false;
  4020. break;
  4021. }
  4022. }
  4023. if (allDone)
  4024. {
  4025. await observer.OnCompletedAsync().ConfigureAwait(false);
  4026. }
  4027. }
  4028. }
  4029. },
  4030. async ex =>
  4031. {
  4032. using (await gate.LockAsync().ConfigureAwait(false))
  4033. {
  4034. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  4035. }
  4036. },
  4037. async () =>
  4038. {
  4039. using (await gate.LockAsync().ConfigureAwait(false))
  4040. {
  4041. isDone[index] = true;
  4042. var allDone = true;
  4043. for (var i = 0; i < 15; i++)
  4044. {
  4045. if (!isDone[i])
  4046. {
  4047. allDone = false;
  4048. break;
  4049. }
  4050. }
  4051. if (allDone)
  4052. {
  4053. await observer.OnCompletedAsync().ConfigureAwait(false);
  4054. }
  4055. }
  4056. }
  4057. );
  4058. return
  4059. (
  4060. CreateObserver<T1>(1, values1),
  4061. CreateObserver<T2>(2, values2),
  4062. CreateObserver<T3>(3, values3),
  4063. CreateObserver<T4>(4, values4),
  4064. CreateObserver<T5>(5, values5),
  4065. CreateObserver<T6>(6, values6),
  4066. CreateObserver<T7>(7, values7),
  4067. CreateObserver<T8>(8, values8),
  4068. CreateObserver<T9>(9, values9),
  4069. CreateObserver<T10>(10, values10),
  4070. CreateObserver<T11>(11, values11),
  4071. CreateObserver<T12>(12, values12),
  4072. CreateObserver<T13>(13, values13),
  4073. CreateObserver<T14>(14, values14),
  4074. CreateObserver<T15>(15, values15)
  4075. );
  4076. }
  4077. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>, IAsyncObserver<T14>, IAsyncObserver<T15>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> selector)
  4078. {
  4079. if (observer == null)
  4080. throw new ArgumentNullException(nameof(observer));
  4081. if (selector == null)
  4082. throw new ArgumentNullException(nameof(selector));
  4083. return Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(observer, (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) => Task.FromResult(selector(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15)));
  4084. }
  4085. public static (IAsyncObserver<T1>, IAsyncObserver<T2>, IAsyncObserver<T3>, IAsyncObserver<T4>, IAsyncObserver<T5>, IAsyncObserver<T6>, IAsyncObserver<T7>, IAsyncObserver<T8>, IAsyncObserver<T9>, IAsyncObserver<T10>, IAsyncObserver<T11>, IAsyncObserver<T12>, IAsyncObserver<T13>, IAsyncObserver<T14>, IAsyncObserver<T15>) Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(IAsyncObserver<TResult> observer, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, Task<TResult>> selector)
  4086. {
  4087. if (observer == null)
  4088. throw new ArgumentNullException(nameof(observer));
  4089. if (selector == null)
  4090. throw new ArgumentNullException(nameof(selector));
  4091. var gate = new AsyncLock();
  4092. var values1 = new Queue<T1>();
  4093. var values2 = new Queue<T2>();
  4094. var values3 = new Queue<T3>();
  4095. var values4 = new Queue<T4>();
  4096. var values5 = new Queue<T5>();
  4097. var values6 = new Queue<T6>();
  4098. var values7 = new Queue<T7>();
  4099. var values8 = new Queue<T8>();
  4100. var values9 = new Queue<T9>();
  4101. var values10 = new Queue<T10>();
  4102. var values11 = new Queue<T11>();
  4103. var values12 = new Queue<T12>();
  4104. var values13 = new Queue<T13>();
  4105. var values14 = new Queue<T14>();
  4106. var values15 = new Queue<T15>();
  4107. var isDone = new bool[15];
  4108. IAsyncObserver<T> CreateObserver<T>(int index, Queue<T> queue) =>
  4109. Create<T>(
  4110. async x =>
  4111. {
  4112. using (await gate.LockAsync().ConfigureAwait(false))
  4113. {
  4114. queue.Enqueue(x);
  4115. if (values1.Count > 0 && values2.Count > 0 && values3.Count > 0 && values4.Count > 0 && values5.Count > 0 && values6.Count > 0 && values7.Count > 0 && values8.Count > 0 && values9.Count > 0 && values10.Count > 0 && values11.Count > 0 && values12.Count > 0 && values13.Count > 0 && values14.Count > 0 && values15.Count > 0)
  4116. {
  4117. TResult res;
  4118. try
  4119. {
  4120. res = await selector(values1.Dequeue(), values2.Dequeue(), values3.Dequeue(), values4.Dequeue(), values5.Dequeue(), values6.Dequeue(), values7.Dequeue(), values8.Dequeue(), values9.Dequeue(), values10.Dequeue(), values11.Dequeue(), values12.Dequeue(), values13.Dequeue(), values14.Dequeue(), values15.Dequeue()).ConfigureAwait(false);
  4121. }
  4122. catch (Exception ex)
  4123. {
  4124. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  4125. return;
  4126. }
  4127. await observer.OnNextAsync(res).ConfigureAwait(false);
  4128. }
  4129. else
  4130. {
  4131. var allDone = true;
  4132. for (var i = 0; i < 15; i++)
  4133. {
  4134. if (i != index && !isDone[i])
  4135. {
  4136. allDone = false;
  4137. break;
  4138. }
  4139. }
  4140. if (allDone)
  4141. {
  4142. await observer.OnCompletedAsync().ConfigureAwait(false);
  4143. }
  4144. }
  4145. }
  4146. },
  4147. async ex =>
  4148. {
  4149. using (await gate.LockAsync().ConfigureAwait(false))
  4150. {
  4151. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  4152. }
  4153. },
  4154. async () =>
  4155. {
  4156. using (await gate.LockAsync().ConfigureAwait(false))
  4157. {
  4158. isDone[index] = true;
  4159. var allDone = true;
  4160. for (var i = 0; i < 15; i++)
  4161. {
  4162. if (!isDone[i])
  4163. {
  4164. allDone = false;
  4165. break;
  4166. }
  4167. }
  4168. if (allDone)
  4169. {
  4170. await observer.OnCompletedAsync().ConfigureAwait(false);
  4171. }
  4172. }
  4173. }
  4174. );
  4175. return
  4176. (
  4177. CreateObserver<T1>(1, values1),
  4178. CreateObserver<T2>(2, values2),
  4179. CreateObserver<T3>(3, values3),
  4180. CreateObserver<T4>(4, values4),
  4181. CreateObserver<T5>(5, values5),
  4182. CreateObserver<T6>(6, values6),
  4183. CreateObserver<T7>(7, values7),
  4184. CreateObserver<T8>(8, values8),
  4185. CreateObserver<T9>(9, values9),
  4186. CreateObserver<T10>(10, values10),
  4187. CreateObserver<T11>(11, values11),
  4188. CreateObserver<T12>(12, values12),
  4189. CreateObserver<T13>(13, values13),
  4190. CreateObserver<T14>(14, values14),
  4191. CreateObserver<T15>(15, values15)
  4192. );
  4193. }
  4194. }
  4195. }