AsyncPlan.Generated.cs 105 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT License.
  3. // See the LICENSE file in the project root for more information.
  4. using System.Collections.Generic;
  5. using System.Threading.Tasks;
  6. namespace System.Reactive.Joins
  7. {
  8. internal sealed class AsyncPlan<TSource1, TResult> : AsyncPlanBase<TSource1, TResult>
  9. {
  10. private readonly Func<TSource1, TResult> _selector;
  11. internal AsyncPlan(AsyncPattern<TSource1> expression, Func<TSource1, TResult> selector)
  12. : base(expression)
  13. {
  14. _selector = selector;
  15. }
  16. protected override ValueTask<TResult> EvalAsync(TSource1 arg1) => new ValueTask<TResult>(_selector(arg1));
  17. }
  18. internal sealed class AsyncPlanWithTask<TSource1, TResult> : AsyncPlanBase<TSource1, TResult>
  19. {
  20. private readonly Func<TSource1, ValueTask<TResult>> _selector;
  21. internal AsyncPlanWithTask(AsyncPattern<TSource1> expression, Func<TSource1, ValueTask<TResult>> selector)
  22. : base(expression)
  23. {
  24. _selector = selector;
  25. }
  26. protected override ValueTask<TResult> EvalAsync(TSource1 arg1) => _selector(arg1);
  27. }
  28. internal abstract class AsyncPlanBase<TSource1, TResult> : AsyncPlan<TResult>
  29. {
  30. private readonly AsyncPattern<TSource1> _expression;
  31. internal AsyncPlanBase(AsyncPattern<TSource1> expression)
  32. {
  33. _expression = expression;
  34. }
  35. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1);
  36. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  37. {
  38. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  39. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  40. var activePlan = default(ActiveAsyncPlan<TSource1>);
  41. activePlan = new ActiveAsyncPlan<TSource1>(
  42. joinObserver1,
  43. async (arg1) =>
  44. {
  45. var res = default(TResult);
  46. try
  47. {
  48. res = await EvalAsync(arg1).ConfigureAwait(false);
  49. }
  50. catch (Exception ex)
  51. {
  52. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  53. return;
  54. }
  55. await observer.OnNextAsync(res).ConfigureAwait(false);
  56. },
  57. async () =>
  58. {
  59. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  60. await deactivate(activePlan).ConfigureAwait(false);
  61. }
  62. );
  63. joinObserver1.AddActivePlan(activePlan);
  64. return activePlan;
  65. }
  66. }
  67. internal sealed class AsyncPlan<TSource1, TSource2, TResult> : AsyncPlanBase<TSource1, TSource2, TResult>
  68. {
  69. private readonly Func<TSource1, TSource2, TResult> _selector;
  70. internal AsyncPlan(AsyncPattern<TSource1, TSource2> expression, Func<TSource1, TSource2, TResult> selector)
  71. : base(expression)
  72. {
  73. _selector = selector;
  74. }
  75. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2) => new ValueTask<TResult>(_selector(arg1, arg2));
  76. }
  77. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TResult> : AsyncPlanBase<TSource1, TSource2, TResult>
  78. {
  79. private readonly Func<TSource1, TSource2, ValueTask<TResult>> _selector;
  80. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2> expression, Func<TSource1, TSource2, ValueTask<TResult>> selector)
  81. : base(expression)
  82. {
  83. _selector = selector;
  84. }
  85. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2) => _selector(arg1, arg2);
  86. }
  87. internal abstract class AsyncPlanBase<TSource1, TSource2, TResult> : AsyncPlan<TResult>
  88. {
  89. private readonly AsyncPattern<TSource1, TSource2> _expression;
  90. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2> expression)
  91. {
  92. _expression = expression;
  93. }
  94. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2);
  95. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  96. {
  97. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  98. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  99. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  100. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2>);
  101. activePlan = new ActiveAsyncPlan<TSource1, TSource2>(
  102. joinObserver1,
  103. joinObserver2,
  104. async (arg1, arg2) =>
  105. {
  106. var res = default(TResult);
  107. try
  108. {
  109. res = await EvalAsync(arg1, arg2).ConfigureAwait(false);
  110. }
  111. catch (Exception ex)
  112. {
  113. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  114. return;
  115. }
  116. await observer.OnNextAsync(res).ConfigureAwait(false);
  117. },
  118. async () =>
  119. {
  120. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  121. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  122. await deactivate(activePlan).ConfigureAwait(false);
  123. }
  124. );
  125. joinObserver1.AddActivePlan(activePlan);
  126. joinObserver2.AddActivePlan(activePlan);
  127. return activePlan;
  128. }
  129. }
  130. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TResult>
  131. {
  132. private readonly Func<TSource1, TSource2, TSource3, TResult> _selector;
  133. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3> expression, Func<TSource1, TSource2, TSource3, TResult> selector)
  134. : base(expression)
  135. {
  136. _selector = selector;
  137. }
  138. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3) => new ValueTask<TResult>(_selector(arg1, arg2, arg3));
  139. }
  140. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TResult>
  141. {
  142. private readonly Func<TSource1, TSource2, TSource3, ValueTask<TResult>> _selector;
  143. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3> expression, Func<TSource1, TSource2, TSource3, ValueTask<TResult>> selector)
  144. : base(expression)
  145. {
  146. _selector = selector;
  147. }
  148. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3) => _selector(arg1, arg2, arg3);
  149. }
  150. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TResult> : AsyncPlan<TResult>
  151. {
  152. private readonly AsyncPattern<TSource1, TSource2, TSource3> _expression;
  153. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3> expression)
  154. {
  155. _expression = expression;
  156. }
  157. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3);
  158. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  159. {
  160. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  161. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  162. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  163. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  164. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3>);
  165. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3>(
  166. joinObserver1,
  167. joinObserver2,
  168. joinObserver3,
  169. async (arg1, arg2, arg3) =>
  170. {
  171. var res = default(TResult);
  172. try
  173. {
  174. res = await EvalAsync(arg1, arg2, arg3).ConfigureAwait(false);
  175. }
  176. catch (Exception ex)
  177. {
  178. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  179. return;
  180. }
  181. await observer.OnNextAsync(res).ConfigureAwait(false);
  182. },
  183. async () =>
  184. {
  185. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  186. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  187. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  188. await deactivate(activePlan).ConfigureAwait(false);
  189. }
  190. );
  191. joinObserver1.AddActivePlan(activePlan);
  192. joinObserver2.AddActivePlan(activePlan);
  193. joinObserver3.AddActivePlan(activePlan);
  194. return activePlan;
  195. }
  196. }
  197. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TResult>
  198. {
  199. private readonly Func<TSource1, TSource2, TSource3, TSource4, TResult> _selector;
  200. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4> expression, Func<TSource1, TSource2, TSource3, TSource4, TResult> selector)
  201. : base(expression)
  202. {
  203. _selector = selector;
  204. }
  205. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4));
  206. }
  207. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TResult>
  208. {
  209. private readonly Func<TSource1, TSource2, TSource3, TSource4, ValueTask<TResult>> _selector;
  210. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4> expression, Func<TSource1, TSource2, TSource3, TSource4, ValueTask<TResult>> selector)
  211. : base(expression)
  212. {
  213. _selector = selector;
  214. }
  215. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4) => _selector(arg1, arg2, arg3, arg4);
  216. }
  217. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TResult> : AsyncPlan<TResult>
  218. {
  219. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4> _expression;
  220. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4> expression)
  221. {
  222. _expression = expression;
  223. }
  224. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4);
  225. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  226. {
  227. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  228. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  229. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  230. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  231. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  232. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4>);
  233. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4>(
  234. joinObserver1,
  235. joinObserver2,
  236. joinObserver3,
  237. joinObserver4,
  238. async (arg1, arg2, arg3, arg4) =>
  239. {
  240. var res = default(TResult);
  241. try
  242. {
  243. res = await EvalAsync(arg1, arg2, arg3, arg4).ConfigureAwait(false);
  244. }
  245. catch (Exception ex)
  246. {
  247. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  248. return;
  249. }
  250. await observer.OnNextAsync(res).ConfigureAwait(false);
  251. },
  252. async () =>
  253. {
  254. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  255. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  256. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  257. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  258. await deactivate(activePlan).ConfigureAwait(false);
  259. }
  260. );
  261. joinObserver1.AddActivePlan(activePlan);
  262. joinObserver2.AddActivePlan(activePlan);
  263. joinObserver3.AddActivePlan(activePlan);
  264. joinObserver4.AddActivePlan(activePlan);
  265. return activePlan;
  266. }
  267. }
  268. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TResult>
  269. {
  270. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TResult> _selector;
  271. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TResult> selector)
  272. : base(expression)
  273. {
  274. _selector = selector;
  275. }
  276. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5));
  277. }
  278. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TResult>
  279. {
  280. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, ValueTask<TResult>> _selector;
  281. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, ValueTask<TResult>> selector)
  282. : base(expression)
  283. {
  284. _selector = selector;
  285. }
  286. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5) => _selector(arg1, arg2, arg3, arg4, arg5);
  287. }
  288. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TResult> : AsyncPlan<TResult>
  289. {
  290. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5> _expression;
  291. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5> expression)
  292. {
  293. _expression = expression;
  294. }
  295. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5);
  296. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  297. {
  298. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  299. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  300. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  301. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  302. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  303. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  304. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5>);
  305. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5>(
  306. joinObserver1,
  307. joinObserver2,
  308. joinObserver3,
  309. joinObserver4,
  310. joinObserver5,
  311. async (arg1, arg2, arg3, arg4, arg5) =>
  312. {
  313. var res = default(TResult);
  314. try
  315. {
  316. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5).ConfigureAwait(false);
  317. }
  318. catch (Exception ex)
  319. {
  320. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  321. return;
  322. }
  323. await observer.OnNextAsync(res).ConfigureAwait(false);
  324. },
  325. async () =>
  326. {
  327. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  328. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  329. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  330. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  331. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  332. await deactivate(activePlan).ConfigureAwait(false);
  333. }
  334. );
  335. joinObserver1.AddActivePlan(activePlan);
  336. joinObserver2.AddActivePlan(activePlan);
  337. joinObserver3.AddActivePlan(activePlan);
  338. joinObserver4.AddActivePlan(activePlan);
  339. joinObserver5.AddActivePlan(activePlan);
  340. return activePlan;
  341. }
  342. }
  343. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult>
  344. {
  345. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult> _selector;
  346. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult> selector)
  347. : base(expression)
  348. {
  349. _selector = selector;
  350. }
  351. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6));
  352. }
  353. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult>
  354. {
  355. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, ValueTask<TResult>> _selector;
  356. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, ValueTask<TResult>> selector)
  357. : base(expression)
  358. {
  359. _selector = selector;
  360. }
  361. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6) => _selector(arg1, arg2, arg3, arg4, arg5, arg6);
  362. }
  363. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult> : AsyncPlan<TResult>
  364. {
  365. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6> _expression;
  366. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6> expression)
  367. {
  368. _expression = expression;
  369. }
  370. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6);
  371. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  372. {
  373. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  374. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  375. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  376. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  377. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  378. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  379. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  380. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6>);
  381. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6>(
  382. joinObserver1,
  383. joinObserver2,
  384. joinObserver3,
  385. joinObserver4,
  386. joinObserver5,
  387. joinObserver6,
  388. async (arg1, arg2, arg3, arg4, arg5, arg6) =>
  389. {
  390. var res = default(TResult);
  391. try
  392. {
  393. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6).ConfigureAwait(false);
  394. }
  395. catch (Exception ex)
  396. {
  397. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  398. return;
  399. }
  400. await observer.OnNextAsync(res).ConfigureAwait(false);
  401. },
  402. async () =>
  403. {
  404. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  405. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  406. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  407. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  408. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  409. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  410. await deactivate(activePlan).ConfigureAwait(false);
  411. }
  412. );
  413. joinObserver1.AddActivePlan(activePlan);
  414. joinObserver2.AddActivePlan(activePlan);
  415. joinObserver3.AddActivePlan(activePlan);
  416. joinObserver4.AddActivePlan(activePlan);
  417. joinObserver5.AddActivePlan(activePlan);
  418. joinObserver6.AddActivePlan(activePlan);
  419. return activePlan;
  420. }
  421. }
  422. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult>
  423. {
  424. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult> _selector;
  425. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult> selector)
  426. : base(expression)
  427. {
  428. _selector = selector;
  429. }
  430. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7));
  431. }
  432. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult>
  433. {
  434. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, ValueTask<TResult>> _selector;
  435. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, ValueTask<TResult>> selector)
  436. : base(expression)
  437. {
  438. _selector = selector;
  439. }
  440. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  441. }
  442. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult> : AsyncPlan<TResult>
  443. {
  444. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7> _expression;
  445. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7> expression)
  446. {
  447. _expression = expression;
  448. }
  449. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7);
  450. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  451. {
  452. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  453. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  454. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  455. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  456. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  457. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  458. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  459. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  460. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7>);
  461. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7>(
  462. joinObserver1,
  463. joinObserver2,
  464. joinObserver3,
  465. joinObserver4,
  466. joinObserver5,
  467. joinObserver6,
  468. joinObserver7,
  469. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7) =>
  470. {
  471. var res = default(TResult);
  472. try
  473. {
  474. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7).ConfigureAwait(false);
  475. }
  476. catch (Exception ex)
  477. {
  478. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  479. return;
  480. }
  481. await observer.OnNextAsync(res).ConfigureAwait(false);
  482. },
  483. async () =>
  484. {
  485. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  486. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  487. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  488. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  489. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  490. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  491. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  492. await deactivate(activePlan).ConfigureAwait(false);
  493. }
  494. );
  495. joinObserver1.AddActivePlan(activePlan);
  496. joinObserver2.AddActivePlan(activePlan);
  497. joinObserver3.AddActivePlan(activePlan);
  498. joinObserver4.AddActivePlan(activePlan);
  499. joinObserver5.AddActivePlan(activePlan);
  500. joinObserver6.AddActivePlan(activePlan);
  501. joinObserver7.AddActivePlan(activePlan);
  502. return activePlan;
  503. }
  504. }
  505. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult>
  506. {
  507. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult> _selector;
  508. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult> selector)
  509. : base(expression)
  510. {
  511. _selector = selector;
  512. }
  513. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8));
  514. }
  515. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult>
  516. {
  517. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, ValueTask<TResult>> _selector;
  518. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, ValueTask<TResult>> selector)
  519. : base(expression)
  520. {
  521. _selector = selector;
  522. }
  523. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  524. }
  525. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult> : AsyncPlan<TResult>
  526. {
  527. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8> _expression;
  528. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8> expression)
  529. {
  530. _expression = expression;
  531. }
  532. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8);
  533. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  534. {
  535. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  536. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  537. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  538. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  539. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  540. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  541. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  542. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  543. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  544. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8>);
  545. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8>(
  546. joinObserver1,
  547. joinObserver2,
  548. joinObserver3,
  549. joinObserver4,
  550. joinObserver5,
  551. joinObserver6,
  552. joinObserver7,
  553. joinObserver8,
  554. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) =>
  555. {
  556. var res = default(TResult);
  557. try
  558. {
  559. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8).ConfigureAwait(false);
  560. }
  561. catch (Exception ex)
  562. {
  563. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  564. return;
  565. }
  566. await observer.OnNextAsync(res).ConfigureAwait(false);
  567. },
  568. async () =>
  569. {
  570. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  571. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  572. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  573. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  574. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  575. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  576. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  577. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  578. await deactivate(activePlan).ConfigureAwait(false);
  579. }
  580. );
  581. joinObserver1.AddActivePlan(activePlan);
  582. joinObserver2.AddActivePlan(activePlan);
  583. joinObserver3.AddActivePlan(activePlan);
  584. joinObserver4.AddActivePlan(activePlan);
  585. joinObserver5.AddActivePlan(activePlan);
  586. joinObserver6.AddActivePlan(activePlan);
  587. joinObserver7.AddActivePlan(activePlan);
  588. joinObserver8.AddActivePlan(activePlan);
  589. return activePlan;
  590. }
  591. }
  592. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult>
  593. {
  594. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult> _selector;
  595. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult> selector)
  596. : base(expression)
  597. {
  598. _selector = selector;
  599. }
  600. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9));
  601. }
  602. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult>
  603. {
  604. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, ValueTask<TResult>> _selector;
  605. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, ValueTask<TResult>> selector)
  606. : base(expression)
  607. {
  608. _selector = selector;
  609. }
  610. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
  611. }
  612. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult> : AsyncPlan<TResult>
  613. {
  614. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9> _expression;
  615. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9> expression)
  616. {
  617. _expression = expression;
  618. }
  619. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9);
  620. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  621. {
  622. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  623. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  624. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  625. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  626. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  627. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  628. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  629. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  630. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  631. var joinObserver9 = AsyncPlan<TResult>.CreateObserver<TSource9>(externalSubscriptions, _expression.Source9, onError);
  632. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9>);
  633. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9>(
  634. joinObserver1,
  635. joinObserver2,
  636. joinObserver3,
  637. joinObserver4,
  638. joinObserver5,
  639. joinObserver6,
  640. joinObserver7,
  641. joinObserver8,
  642. joinObserver9,
  643. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) =>
  644. {
  645. var res = default(TResult);
  646. try
  647. {
  648. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9).ConfigureAwait(false);
  649. }
  650. catch (Exception ex)
  651. {
  652. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  653. return;
  654. }
  655. await observer.OnNextAsync(res).ConfigureAwait(false);
  656. },
  657. async () =>
  658. {
  659. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  660. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  661. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  662. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  663. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  664. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  665. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  666. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  667. await joinObserver9.RemoveActivePlan(activePlan).ConfigureAwait(false);
  668. await deactivate(activePlan).ConfigureAwait(false);
  669. }
  670. );
  671. joinObserver1.AddActivePlan(activePlan);
  672. joinObserver2.AddActivePlan(activePlan);
  673. joinObserver3.AddActivePlan(activePlan);
  674. joinObserver4.AddActivePlan(activePlan);
  675. joinObserver5.AddActivePlan(activePlan);
  676. joinObserver6.AddActivePlan(activePlan);
  677. joinObserver7.AddActivePlan(activePlan);
  678. joinObserver8.AddActivePlan(activePlan);
  679. joinObserver9.AddActivePlan(activePlan);
  680. return activePlan;
  681. }
  682. }
  683. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult>
  684. {
  685. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult> _selector;
  686. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult> selector)
  687. : base(expression)
  688. {
  689. _selector = selector;
  690. }
  691. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10));
  692. }
  693. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult>
  694. {
  695. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, ValueTask<TResult>> _selector;
  696. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, ValueTask<TResult>> selector)
  697. : base(expression)
  698. {
  699. _selector = selector;
  700. }
  701. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
  702. }
  703. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult> : AsyncPlan<TResult>
  704. {
  705. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10> _expression;
  706. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10> expression)
  707. {
  708. _expression = expression;
  709. }
  710. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10);
  711. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  712. {
  713. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  714. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  715. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  716. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  717. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  718. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  719. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  720. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  721. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  722. var joinObserver9 = AsyncPlan<TResult>.CreateObserver<TSource9>(externalSubscriptions, _expression.Source9, onError);
  723. var joinObserver10 = AsyncPlan<TResult>.CreateObserver<TSource10>(externalSubscriptions, _expression.Source10, onError);
  724. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10>);
  725. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10>(
  726. joinObserver1,
  727. joinObserver2,
  728. joinObserver3,
  729. joinObserver4,
  730. joinObserver5,
  731. joinObserver6,
  732. joinObserver7,
  733. joinObserver8,
  734. joinObserver9,
  735. joinObserver10,
  736. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) =>
  737. {
  738. var res = default(TResult);
  739. try
  740. {
  741. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10).ConfigureAwait(false);
  742. }
  743. catch (Exception ex)
  744. {
  745. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  746. return;
  747. }
  748. await observer.OnNextAsync(res).ConfigureAwait(false);
  749. },
  750. async () =>
  751. {
  752. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  753. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  754. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  755. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  756. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  757. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  758. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  759. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  760. await joinObserver9.RemoveActivePlan(activePlan).ConfigureAwait(false);
  761. await joinObserver10.RemoveActivePlan(activePlan).ConfigureAwait(false);
  762. await deactivate(activePlan).ConfigureAwait(false);
  763. }
  764. );
  765. joinObserver1.AddActivePlan(activePlan);
  766. joinObserver2.AddActivePlan(activePlan);
  767. joinObserver3.AddActivePlan(activePlan);
  768. joinObserver4.AddActivePlan(activePlan);
  769. joinObserver5.AddActivePlan(activePlan);
  770. joinObserver6.AddActivePlan(activePlan);
  771. joinObserver7.AddActivePlan(activePlan);
  772. joinObserver8.AddActivePlan(activePlan);
  773. joinObserver9.AddActivePlan(activePlan);
  774. joinObserver10.AddActivePlan(activePlan);
  775. return activePlan;
  776. }
  777. }
  778. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult>
  779. {
  780. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult> _selector;
  781. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult> selector)
  782. : base(expression)
  783. {
  784. _selector = selector;
  785. }
  786. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11));
  787. }
  788. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult>
  789. {
  790. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, ValueTask<TResult>> _selector;
  791. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, ValueTask<TResult>> selector)
  792. : base(expression)
  793. {
  794. _selector = selector;
  795. }
  796. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
  797. }
  798. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult> : AsyncPlan<TResult>
  799. {
  800. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11> _expression;
  801. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11> expression)
  802. {
  803. _expression = expression;
  804. }
  805. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11);
  806. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  807. {
  808. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  809. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  810. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  811. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  812. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  813. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  814. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  815. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  816. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  817. var joinObserver9 = AsyncPlan<TResult>.CreateObserver<TSource9>(externalSubscriptions, _expression.Source9, onError);
  818. var joinObserver10 = AsyncPlan<TResult>.CreateObserver<TSource10>(externalSubscriptions, _expression.Source10, onError);
  819. var joinObserver11 = AsyncPlan<TResult>.CreateObserver<TSource11>(externalSubscriptions, _expression.Source11, onError);
  820. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11>);
  821. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11>(
  822. joinObserver1,
  823. joinObserver2,
  824. joinObserver3,
  825. joinObserver4,
  826. joinObserver5,
  827. joinObserver6,
  828. joinObserver7,
  829. joinObserver8,
  830. joinObserver9,
  831. joinObserver10,
  832. joinObserver11,
  833. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) =>
  834. {
  835. var res = default(TResult);
  836. try
  837. {
  838. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11).ConfigureAwait(false);
  839. }
  840. catch (Exception ex)
  841. {
  842. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  843. return;
  844. }
  845. await observer.OnNextAsync(res).ConfigureAwait(false);
  846. },
  847. async () =>
  848. {
  849. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  850. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  851. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  852. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  853. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  854. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  855. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  856. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  857. await joinObserver9.RemoveActivePlan(activePlan).ConfigureAwait(false);
  858. await joinObserver10.RemoveActivePlan(activePlan).ConfigureAwait(false);
  859. await joinObserver11.RemoveActivePlan(activePlan).ConfigureAwait(false);
  860. await deactivate(activePlan).ConfigureAwait(false);
  861. }
  862. );
  863. joinObserver1.AddActivePlan(activePlan);
  864. joinObserver2.AddActivePlan(activePlan);
  865. joinObserver3.AddActivePlan(activePlan);
  866. joinObserver4.AddActivePlan(activePlan);
  867. joinObserver5.AddActivePlan(activePlan);
  868. joinObserver6.AddActivePlan(activePlan);
  869. joinObserver7.AddActivePlan(activePlan);
  870. joinObserver8.AddActivePlan(activePlan);
  871. joinObserver9.AddActivePlan(activePlan);
  872. joinObserver10.AddActivePlan(activePlan);
  873. joinObserver11.AddActivePlan(activePlan);
  874. return activePlan;
  875. }
  876. }
  877. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult>
  878. {
  879. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult> _selector;
  880. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult> selector)
  881. : base(expression)
  882. {
  883. _selector = selector;
  884. }
  885. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12));
  886. }
  887. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult>
  888. {
  889. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, ValueTask<TResult>> _selector;
  890. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, ValueTask<TResult>> selector)
  891. : base(expression)
  892. {
  893. _selector = selector;
  894. }
  895. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
  896. }
  897. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult> : AsyncPlan<TResult>
  898. {
  899. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12> _expression;
  900. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12> expression)
  901. {
  902. _expression = expression;
  903. }
  904. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12);
  905. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  906. {
  907. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  908. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  909. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  910. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  911. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  912. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  913. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  914. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  915. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  916. var joinObserver9 = AsyncPlan<TResult>.CreateObserver<TSource9>(externalSubscriptions, _expression.Source9, onError);
  917. var joinObserver10 = AsyncPlan<TResult>.CreateObserver<TSource10>(externalSubscriptions, _expression.Source10, onError);
  918. var joinObserver11 = AsyncPlan<TResult>.CreateObserver<TSource11>(externalSubscriptions, _expression.Source11, onError);
  919. var joinObserver12 = AsyncPlan<TResult>.CreateObserver<TSource12>(externalSubscriptions, _expression.Source12, onError);
  920. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12>);
  921. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12>(
  922. joinObserver1,
  923. joinObserver2,
  924. joinObserver3,
  925. joinObserver4,
  926. joinObserver5,
  927. joinObserver6,
  928. joinObserver7,
  929. joinObserver8,
  930. joinObserver9,
  931. joinObserver10,
  932. joinObserver11,
  933. joinObserver12,
  934. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) =>
  935. {
  936. var res = default(TResult);
  937. try
  938. {
  939. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12).ConfigureAwait(false);
  940. }
  941. catch (Exception ex)
  942. {
  943. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  944. return;
  945. }
  946. await observer.OnNextAsync(res).ConfigureAwait(false);
  947. },
  948. async () =>
  949. {
  950. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  951. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  952. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  953. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  954. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  955. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  956. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  957. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  958. await joinObserver9.RemoveActivePlan(activePlan).ConfigureAwait(false);
  959. await joinObserver10.RemoveActivePlan(activePlan).ConfigureAwait(false);
  960. await joinObserver11.RemoveActivePlan(activePlan).ConfigureAwait(false);
  961. await joinObserver12.RemoveActivePlan(activePlan).ConfigureAwait(false);
  962. await deactivate(activePlan).ConfigureAwait(false);
  963. }
  964. );
  965. joinObserver1.AddActivePlan(activePlan);
  966. joinObserver2.AddActivePlan(activePlan);
  967. joinObserver3.AddActivePlan(activePlan);
  968. joinObserver4.AddActivePlan(activePlan);
  969. joinObserver5.AddActivePlan(activePlan);
  970. joinObserver6.AddActivePlan(activePlan);
  971. joinObserver7.AddActivePlan(activePlan);
  972. joinObserver8.AddActivePlan(activePlan);
  973. joinObserver9.AddActivePlan(activePlan);
  974. joinObserver10.AddActivePlan(activePlan);
  975. joinObserver11.AddActivePlan(activePlan);
  976. joinObserver12.AddActivePlan(activePlan);
  977. return activePlan;
  978. }
  979. }
  980. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult>
  981. {
  982. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult> _selector;
  983. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult> selector)
  984. : base(expression)
  985. {
  986. _selector = selector;
  987. }
  988. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13));
  989. }
  990. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult>
  991. {
  992. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, ValueTask<TResult>> _selector;
  993. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, ValueTask<TResult>> selector)
  994. : base(expression)
  995. {
  996. _selector = selector;
  997. }
  998. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13);
  999. }
  1000. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult> : AsyncPlan<TResult>
  1001. {
  1002. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13> _expression;
  1003. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13> expression)
  1004. {
  1005. _expression = expression;
  1006. }
  1007. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13);
  1008. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  1009. {
  1010. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  1011. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  1012. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  1013. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  1014. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  1015. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  1016. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  1017. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  1018. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  1019. var joinObserver9 = AsyncPlan<TResult>.CreateObserver<TSource9>(externalSubscriptions, _expression.Source9, onError);
  1020. var joinObserver10 = AsyncPlan<TResult>.CreateObserver<TSource10>(externalSubscriptions, _expression.Source10, onError);
  1021. var joinObserver11 = AsyncPlan<TResult>.CreateObserver<TSource11>(externalSubscriptions, _expression.Source11, onError);
  1022. var joinObserver12 = AsyncPlan<TResult>.CreateObserver<TSource12>(externalSubscriptions, _expression.Source12, onError);
  1023. var joinObserver13 = AsyncPlan<TResult>.CreateObserver<TSource13>(externalSubscriptions, _expression.Source13, onError);
  1024. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13>);
  1025. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13>(
  1026. joinObserver1,
  1027. joinObserver2,
  1028. joinObserver3,
  1029. joinObserver4,
  1030. joinObserver5,
  1031. joinObserver6,
  1032. joinObserver7,
  1033. joinObserver8,
  1034. joinObserver9,
  1035. joinObserver10,
  1036. joinObserver11,
  1037. joinObserver12,
  1038. joinObserver13,
  1039. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13) =>
  1040. {
  1041. var res = default(TResult);
  1042. try
  1043. {
  1044. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13).ConfigureAwait(false);
  1045. }
  1046. catch (Exception ex)
  1047. {
  1048. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1049. return;
  1050. }
  1051. await observer.OnNextAsync(res).ConfigureAwait(false);
  1052. },
  1053. async () =>
  1054. {
  1055. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1056. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1057. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1058. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1059. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1060. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1061. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1062. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1063. await joinObserver9.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1064. await joinObserver10.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1065. await joinObserver11.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1066. await joinObserver12.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1067. await joinObserver13.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1068. await deactivate(activePlan).ConfigureAwait(false);
  1069. }
  1070. );
  1071. joinObserver1.AddActivePlan(activePlan);
  1072. joinObserver2.AddActivePlan(activePlan);
  1073. joinObserver3.AddActivePlan(activePlan);
  1074. joinObserver4.AddActivePlan(activePlan);
  1075. joinObserver5.AddActivePlan(activePlan);
  1076. joinObserver6.AddActivePlan(activePlan);
  1077. joinObserver7.AddActivePlan(activePlan);
  1078. joinObserver8.AddActivePlan(activePlan);
  1079. joinObserver9.AddActivePlan(activePlan);
  1080. joinObserver10.AddActivePlan(activePlan);
  1081. joinObserver11.AddActivePlan(activePlan);
  1082. joinObserver12.AddActivePlan(activePlan);
  1083. joinObserver13.AddActivePlan(activePlan);
  1084. return activePlan;
  1085. }
  1086. }
  1087. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult>
  1088. {
  1089. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult> _selector;
  1090. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult> selector)
  1091. : base(expression)
  1092. {
  1093. _selector = selector;
  1094. }
  1095. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14));
  1096. }
  1097. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult>
  1098. {
  1099. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, ValueTask<TResult>> _selector;
  1100. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, ValueTask<TResult>> selector)
  1101. : base(expression)
  1102. {
  1103. _selector = selector;
  1104. }
  1105. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
  1106. }
  1107. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult> : AsyncPlan<TResult>
  1108. {
  1109. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14> _expression;
  1110. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14> expression)
  1111. {
  1112. _expression = expression;
  1113. }
  1114. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14);
  1115. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  1116. {
  1117. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  1118. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  1119. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  1120. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  1121. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  1122. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  1123. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  1124. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  1125. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  1126. var joinObserver9 = AsyncPlan<TResult>.CreateObserver<TSource9>(externalSubscriptions, _expression.Source9, onError);
  1127. var joinObserver10 = AsyncPlan<TResult>.CreateObserver<TSource10>(externalSubscriptions, _expression.Source10, onError);
  1128. var joinObserver11 = AsyncPlan<TResult>.CreateObserver<TSource11>(externalSubscriptions, _expression.Source11, onError);
  1129. var joinObserver12 = AsyncPlan<TResult>.CreateObserver<TSource12>(externalSubscriptions, _expression.Source12, onError);
  1130. var joinObserver13 = AsyncPlan<TResult>.CreateObserver<TSource13>(externalSubscriptions, _expression.Source13, onError);
  1131. var joinObserver14 = AsyncPlan<TResult>.CreateObserver<TSource14>(externalSubscriptions, _expression.Source14, onError);
  1132. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14>);
  1133. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14>(
  1134. joinObserver1,
  1135. joinObserver2,
  1136. joinObserver3,
  1137. joinObserver4,
  1138. joinObserver5,
  1139. joinObserver6,
  1140. joinObserver7,
  1141. joinObserver8,
  1142. joinObserver9,
  1143. joinObserver10,
  1144. joinObserver11,
  1145. joinObserver12,
  1146. joinObserver13,
  1147. joinObserver14,
  1148. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14) =>
  1149. {
  1150. var res = default(TResult);
  1151. try
  1152. {
  1153. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14).ConfigureAwait(false);
  1154. }
  1155. catch (Exception ex)
  1156. {
  1157. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1158. return;
  1159. }
  1160. await observer.OnNextAsync(res).ConfigureAwait(false);
  1161. },
  1162. async () =>
  1163. {
  1164. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1165. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1166. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1167. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1168. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1169. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1170. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1171. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1172. await joinObserver9.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1173. await joinObserver10.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1174. await joinObserver11.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1175. await joinObserver12.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1176. await joinObserver13.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1177. await joinObserver14.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1178. await deactivate(activePlan).ConfigureAwait(false);
  1179. }
  1180. );
  1181. joinObserver1.AddActivePlan(activePlan);
  1182. joinObserver2.AddActivePlan(activePlan);
  1183. joinObserver3.AddActivePlan(activePlan);
  1184. joinObserver4.AddActivePlan(activePlan);
  1185. joinObserver5.AddActivePlan(activePlan);
  1186. joinObserver6.AddActivePlan(activePlan);
  1187. joinObserver7.AddActivePlan(activePlan);
  1188. joinObserver8.AddActivePlan(activePlan);
  1189. joinObserver9.AddActivePlan(activePlan);
  1190. joinObserver10.AddActivePlan(activePlan);
  1191. joinObserver11.AddActivePlan(activePlan);
  1192. joinObserver12.AddActivePlan(activePlan);
  1193. joinObserver13.AddActivePlan(activePlan);
  1194. joinObserver14.AddActivePlan(activePlan);
  1195. return activePlan;
  1196. }
  1197. }
  1198. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult>
  1199. {
  1200. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult> _selector;
  1201. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult> selector)
  1202. : base(expression)
  1203. {
  1204. _selector = selector;
  1205. }
  1206. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14, TSource15 arg15) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15));
  1207. }
  1208. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult>
  1209. {
  1210. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, ValueTask<TResult>> _selector;
  1211. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, ValueTask<TResult>> selector)
  1212. : base(expression)
  1213. {
  1214. _selector = selector;
  1215. }
  1216. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14, TSource15 arg15) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
  1217. }
  1218. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult> : AsyncPlan<TResult>
  1219. {
  1220. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15> _expression;
  1221. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15> expression)
  1222. {
  1223. _expression = expression;
  1224. }
  1225. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14, TSource15 arg15);
  1226. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  1227. {
  1228. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  1229. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  1230. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  1231. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  1232. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  1233. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  1234. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  1235. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  1236. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  1237. var joinObserver9 = AsyncPlan<TResult>.CreateObserver<TSource9>(externalSubscriptions, _expression.Source9, onError);
  1238. var joinObserver10 = AsyncPlan<TResult>.CreateObserver<TSource10>(externalSubscriptions, _expression.Source10, onError);
  1239. var joinObserver11 = AsyncPlan<TResult>.CreateObserver<TSource11>(externalSubscriptions, _expression.Source11, onError);
  1240. var joinObserver12 = AsyncPlan<TResult>.CreateObserver<TSource12>(externalSubscriptions, _expression.Source12, onError);
  1241. var joinObserver13 = AsyncPlan<TResult>.CreateObserver<TSource13>(externalSubscriptions, _expression.Source13, onError);
  1242. var joinObserver14 = AsyncPlan<TResult>.CreateObserver<TSource14>(externalSubscriptions, _expression.Source14, onError);
  1243. var joinObserver15 = AsyncPlan<TResult>.CreateObserver<TSource15>(externalSubscriptions, _expression.Source15, onError);
  1244. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15>);
  1245. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15>(
  1246. joinObserver1,
  1247. joinObserver2,
  1248. joinObserver3,
  1249. joinObserver4,
  1250. joinObserver5,
  1251. joinObserver6,
  1252. joinObserver7,
  1253. joinObserver8,
  1254. joinObserver9,
  1255. joinObserver10,
  1256. joinObserver11,
  1257. joinObserver12,
  1258. joinObserver13,
  1259. joinObserver14,
  1260. joinObserver15,
  1261. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15) =>
  1262. {
  1263. var res = default(TResult);
  1264. try
  1265. {
  1266. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15).ConfigureAwait(false);
  1267. }
  1268. catch (Exception ex)
  1269. {
  1270. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1271. return;
  1272. }
  1273. await observer.OnNextAsync(res).ConfigureAwait(false);
  1274. },
  1275. async () =>
  1276. {
  1277. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1278. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1279. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1280. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1281. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1282. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1283. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1284. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1285. await joinObserver9.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1286. await joinObserver10.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1287. await joinObserver11.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1288. await joinObserver12.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1289. await joinObserver13.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1290. await joinObserver14.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1291. await joinObserver15.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1292. await deactivate(activePlan).ConfigureAwait(false);
  1293. }
  1294. );
  1295. joinObserver1.AddActivePlan(activePlan);
  1296. joinObserver2.AddActivePlan(activePlan);
  1297. joinObserver3.AddActivePlan(activePlan);
  1298. joinObserver4.AddActivePlan(activePlan);
  1299. joinObserver5.AddActivePlan(activePlan);
  1300. joinObserver6.AddActivePlan(activePlan);
  1301. joinObserver7.AddActivePlan(activePlan);
  1302. joinObserver8.AddActivePlan(activePlan);
  1303. joinObserver9.AddActivePlan(activePlan);
  1304. joinObserver10.AddActivePlan(activePlan);
  1305. joinObserver11.AddActivePlan(activePlan);
  1306. joinObserver12.AddActivePlan(activePlan);
  1307. joinObserver13.AddActivePlan(activePlan);
  1308. joinObserver14.AddActivePlan(activePlan);
  1309. joinObserver15.AddActivePlan(activePlan);
  1310. return activePlan;
  1311. }
  1312. }
  1313. internal sealed class AsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult>
  1314. {
  1315. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult> _selector;
  1316. internal AsyncPlan(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult> selector)
  1317. : base(expression)
  1318. {
  1319. _selector = selector;
  1320. }
  1321. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14, TSource15 arg15, TSource16 arg16) => new ValueTask<TResult>(_selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16));
  1322. }
  1323. internal sealed class AsyncPlanWithTask<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult> : AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult>
  1324. {
  1325. private readonly Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, ValueTask<TResult>> _selector;
  1326. internal AsyncPlanWithTask(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16> expression, Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, ValueTask<TResult>> selector)
  1327. : base(expression)
  1328. {
  1329. _selector = selector;
  1330. }
  1331. protected override ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14, TSource15 arg15, TSource16 arg16) => _selector(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16);
  1332. }
  1333. internal abstract class AsyncPlanBase<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult> : AsyncPlan<TResult>
  1334. {
  1335. private readonly AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16> _expression;
  1336. internal AsyncPlanBase(AsyncPattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16> expression)
  1337. {
  1338. _expression = expression;
  1339. }
  1340. protected abstract ValueTask<TResult> EvalAsync(TSource1 arg1, TSource2 arg2, TSource3 arg3, TSource4 arg4, TSource5 arg5, TSource6 arg6, TSource7 arg7, TSource8 arg8, TSource9 arg9, TSource10 arg10, TSource11 arg11, TSource12 arg12, TSource13 arg13, TSource14 arg14, TSource15 arg15, TSource16 arg16);
  1341. internal override ActiveAsyncPlan Activate(Dictionary<object, IAsyncJoinObserver> externalSubscriptions, IAsyncObserver<TResult> observer, Func<ActiveAsyncPlan, ValueTask> deactivate)
  1342. {
  1343. var onError = new Func<Exception, ValueTask>(observer.OnErrorAsync);
  1344. var joinObserver1 = AsyncPlan<TResult>.CreateObserver<TSource1>(externalSubscriptions, _expression.Source1, onError);
  1345. var joinObserver2 = AsyncPlan<TResult>.CreateObserver<TSource2>(externalSubscriptions, _expression.Source2, onError);
  1346. var joinObserver3 = AsyncPlan<TResult>.CreateObserver<TSource3>(externalSubscriptions, _expression.Source3, onError);
  1347. var joinObserver4 = AsyncPlan<TResult>.CreateObserver<TSource4>(externalSubscriptions, _expression.Source4, onError);
  1348. var joinObserver5 = AsyncPlan<TResult>.CreateObserver<TSource5>(externalSubscriptions, _expression.Source5, onError);
  1349. var joinObserver6 = AsyncPlan<TResult>.CreateObserver<TSource6>(externalSubscriptions, _expression.Source6, onError);
  1350. var joinObserver7 = AsyncPlan<TResult>.CreateObserver<TSource7>(externalSubscriptions, _expression.Source7, onError);
  1351. var joinObserver8 = AsyncPlan<TResult>.CreateObserver<TSource8>(externalSubscriptions, _expression.Source8, onError);
  1352. var joinObserver9 = AsyncPlan<TResult>.CreateObserver<TSource9>(externalSubscriptions, _expression.Source9, onError);
  1353. var joinObserver10 = AsyncPlan<TResult>.CreateObserver<TSource10>(externalSubscriptions, _expression.Source10, onError);
  1354. var joinObserver11 = AsyncPlan<TResult>.CreateObserver<TSource11>(externalSubscriptions, _expression.Source11, onError);
  1355. var joinObserver12 = AsyncPlan<TResult>.CreateObserver<TSource12>(externalSubscriptions, _expression.Source12, onError);
  1356. var joinObserver13 = AsyncPlan<TResult>.CreateObserver<TSource13>(externalSubscriptions, _expression.Source13, onError);
  1357. var joinObserver14 = AsyncPlan<TResult>.CreateObserver<TSource14>(externalSubscriptions, _expression.Source14, onError);
  1358. var joinObserver15 = AsyncPlan<TResult>.CreateObserver<TSource15>(externalSubscriptions, _expression.Source15, onError);
  1359. var joinObserver16 = AsyncPlan<TResult>.CreateObserver<TSource16>(externalSubscriptions, _expression.Source16, onError);
  1360. var activePlan = default(ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16>);
  1361. activePlan = new ActiveAsyncPlan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16>(
  1362. joinObserver1,
  1363. joinObserver2,
  1364. joinObserver3,
  1365. joinObserver4,
  1366. joinObserver5,
  1367. joinObserver6,
  1368. joinObserver7,
  1369. joinObserver8,
  1370. joinObserver9,
  1371. joinObserver10,
  1372. joinObserver11,
  1373. joinObserver12,
  1374. joinObserver13,
  1375. joinObserver14,
  1376. joinObserver15,
  1377. joinObserver16,
  1378. async (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16) =>
  1379. {
  1380. var res = default(TResult);
  1381. try
  1382. {
  1383. res = await EvalAsync(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16).ConfigureAwait(false);
  1384. }
  1385. catch (Exception ex)
  1386. {
  1387. await observer.OnErrorAsync(ex).ConfigureAwait(false);
  1388. return;
  1389. }
  1390. await observer.OnNextAsync(res).ConfigureAwait(false);
  1391. },
  1392. async () =>
  1393. {
  1394. await joinObserver1.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1395. await joinObserver2.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1396. await joinObserver3.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1397. await joinObserver4.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1398. await joinObserver5.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1399. await joinObserver6.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1400. await joinObserver7.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1401. await joinObserver8.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1402. await joinObserver9.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1403. await joinObserver10.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1404. await joinObserver11.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1405. await joinObserver12.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1406. await joinObserver13.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1407. await joinObserver14.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1408. await joinObserver15.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1409. await joinObserver16.RemoveActivePlan(activePlan).ConfigureAwait(false);
  1410. await deactivate(activePlan).ConfigureAwait(false);
  1411. }
  1412. );
  1413. joinObserver1.AddActivePlan(activePlan);
  1414. joinObserver2.AddActivePlan(activePlan);
  1415. joinObserver3.AddActivePlan(activePlan);
  1416. joinObserver4.AddActivePlan(activePlan);
  1417. joinObserver5.AddActivePlan(activePlan);
  1418. joinObserver6.AddActivePlan(activePlan);
  1419. joinObserver7.AddActivePlan(activePlan);
  1420. joinObserver8.AddActivePlan(activePlan);
  1421. joinObserver9.AddActivePlan(activePlan);
  1422. joinObserver10.AddActivePlan(activePlan);
  1423. joinObserver11.AddActivePlan(activePlan);
  1424. joinObserver12.AddActivePlan(activePlan);
  1425. joinObserver13.AddActivePlan(activePlan);
  1426. joinObserver14.AddActivePlan(activePlan);
  1427. joinObserver15.AddActivePlan(activePlan);
  1428. joinObserver16.AddActivePlan(activePlan);
  1429. return activePlan;
  1430. }
  1431. }
  1432. }