Sum.Generated.cs 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System.Collections.Generic;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. namespace System.Linq
  8. {
  9. public static partial class AsyncEnumerable
  10. {
  11. public static Task<int> SumAsync(this IAsyncEnumerable<int> source, CancellationToken cancellationToken = default)
  12. {
  13. if (source == null)
  14. throw Error.ArgumentNull(nameof(source));
  15. return SumCore(source, cancellationToken);
  16. }
  17. public static Task<int> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, int> selector, CancellationToken cancellationToken = default)
  18. {
  19. if (source == null)
  20. throw Error.ArgumentNull(nameof(source));
  21. if (selector == null)
  22. throw Error.ArgumentNull(nameof(selector));
  23. return SumCore(source, selector, cancellationToken);
  24. }
  25. public static Task<int> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<int>> selector, CancellationToken cancellationToken = default)
  26. {
  27. if (source == null)
  28. throw Error.ArgumentNull(nameof(source));
  29. if (selector == null)
  30. throw Error.ArgumentNull(nameof(selector));
  31. return SumCore(source, selector, cancellationToken);
  32. }
  33. #if !NO_DEEP_CANCELLATION
  34. public static Task<int> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<int>> selector, CancellationToken cancellationToken = default)
  35. {
  36. if (source == null)
  37. throw Error.ArgumentNull(nameof(source));
  38. if (selector == null)
  39. throw Error.ArgumentNull(nameof(selector));
  40. return SumCore(source, selector, cancellationToken);
  41. }
  42. #endif
  43. private static async Task<int> SumCore(IAsyncEnumerable<int> source, CancellationToken cancellationToken)
  44. {
  45. var sum = 0;
  46. var e = source.GetAsyncEnumerator(cancellationToken);
  47. try
  48. {
  49. while (await e.MoveNextAsync().ConfigureAwait(false))
  50. {
  51. checked
  52. {
  53. sum += e.Current;
  54. }
  55. }
  56. }
  57. finally
  58. {
  59. await e.DisposeAsync().ConfigureAwait(false);
  60. }
  61. return sum;
  62. }
  63. private static async Task<int> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, int> selector, CancellationToken cancellationToken)
  64. {
  65. var sum = 0;
  66. var e = source.GetAsyncEnumerator(cancellationToken);
  67. try
  68. {
  69. while (await e.MoveNextAsync().ConfigureAwait(false))
  70. {
  71. var value = selector(e.Current);
  72. checked
  73. {
  74. sum += value;
  75. }
  76. }
  77. }
  78. finally
  79. {
  80. await e.DisposeAsync().ConfigureAwait(false);
  81. }
  82. return sum;
  83. }
  84. private static async Task<int> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<int>> selector, CancellationToken cancellationToken)
  85. {
  86. var sum = 0;
  87. var e = source.GetAsyncEnumerator(cancellationToken);
  88. try
  89. {
  90. while (await e.MoveNextAsync().ConfigureAwait(false))
  91. {
  92. var value = await selector(e.Current).ConfigureAwait(false);
  93. checked
  94. {
  95. sum += value;
  96. }
  97. }
  98. }
  99. finally
  100. {
  101. await e.DisposeAsync().ConfigureAwait(false);
  102. }
  103. return sum;
  104. }
  105. #if !NO_DEEP_CANCELLATION
  106. private static async Task<int> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<int>> selector, CancellationToken cancellationToken)
  107. {
  108. var sum = 0;
  109. var e = source.GetAsyncEnumerator(cancellationToken);
  110. try
  111. {
  112. while (await e.MoveNextAsync().ConfigureAwait(false))
  113. {
  114. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  115. checked
  116. {
  117. sum += value;
  118. }
  119. }
  120. }
  121. finally
  122. {
  123. await e.DisposeAsync().ConfigureAwait(false);
  124. }
  125. return sum;
  126. }
  127. #endif
  128. public static Task<long> SumAsync(this IAsyncEnumerable<long> source, CancellationToken cancellationToken = default)
  129. {
  130. if (source == null)
  131. throw Error.ArgumentNull(nameof(source));
  132. return SumCore(source, cancellationToken);
  133. }
  134. public static Task<long> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, long> selector, CancellationToken cancellationToken = default)
  135. {
  136. if (source == null)
  137. throw Error.ArgumentNull(nameof(source));
  138. if (selector == null)
  139. throw Error.ArgumentNull(nameof(selector));
  140. return SumCore(source, selector, cancellationToken);
  141. }
  142. public static Task<long> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<long>> selector, CancellationToken cancellationToken = default)
  143. {
  144. if (source == null)
  145. throw Error.ArgumentNull(nameof(source));
  146. if (selector == null)
  147. throw Error.ArgumentNull(nameof(selector));
  148. return SumCore(source, selector, cancellationToken);
  149. }
  150. #if !NO_DEEP_CANCELLATION
  151. public static Task<long> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<long>> selector, CancellationToken cancellationToken = default)
  152. {
  153. if (source == null)
  154. throw Error.ArgumentNull(nameof(source));
  155. if (selector == null)
  156. throw Error.ArgumentNull(nameof(selector));
  157. return SumCore(source, selector, cancellationToken);
  158. }
  159. #endif
  160. private static async Task<long> SumCore(IAsyncEnumerable<long> source, CancellationToken cancellationToken)
  161. {
  162. var sum = 0L;
  163. var e = source.GetAsyncEnumerator(cancellationToken);
  164. try
  165. {
  166. while (await e.MoveNextAsync().ConfigureAwait(false))
  167. {
  168. checked
  169. {
  170. sum += e.Current;
  171. }
  172. }
  173. }
  174. finally
  175. {
  176. await e.DisposeAsync().ConfigureAwait(false);
  177. }
  178. return sum;
  179. }
  180. private static async Task<long> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, long> selector, CancellationToken cancellationToken)
  181. {
  182. var sum = 0L;
  183. var e = source.GetAsyncEnumerator(cancellationToken);
  184. try
  185. {
  186. while (await e.MoveNextAsync().ConfigureAwait(false))
  187. {
  188. var value = selector(e.Current);
  189. checked
  190. {
  191. sum += value;
  192. }
  193. }
  194. }
  195. finally
  196. {
  197. await e.DisposeAsync().ConfigureAwait(false);
  198. }
  199. return sum;
  200. }
  201. private static async Task<long> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<long>> selector, CancellationToken cancellationToken)
  202. {
  203. var sum = 0L;
  204. var e = source.GetAsyncEnumerator(cancellationToken);
  205. try
  206. {
  207. while (await e.MoveNextAsync().ConfigureAwait(false))
  208. {
  209. var value = await selector(e.Current).ConfigureAwait(false);
  210. checked
  211. {
  212. sum += value;
  213. }
  214. }
  215. }
  216. finally
  217. {
  218. await e.DisposeAsync().ConfigureAwait(false);
  219. }
  220. return sum;
  221. }
  222. #if !NO_DEEP_CANCELLATION
  223. private static async Task<long> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<long>> selector, CancellationToken cancellationToken)
  224. {
  225. var sum = 0L;
  226. var e = source.GetAsyncEnumerator(cancellationToken);
  227. try
  228. {
  229. while (await e.MoveNextAsync().ConfigureAwait(false))
  230. {
  231. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  232. checked
  233. {
  234. sum += value;
  235. }
  236. }
  237. }
  238. finally
  239. {
  240. await e.DisposeAsync().ConfigureAwait(false);
  241. }
  242. return sum;
  243. }
  244. #endif
  245. public static Task<float> SumAsync(this IAsyncEnumerable<float> source, CancellationToken cancellationToken = default)
  246. {
  247. if (source == null)
  248. throw Error.ArgumentNull(nameof(source));
  249. return SumCore(source, cancellationToken);
  250. }
  251. public static Task<float> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, float> selector, CancellationToken cancellationToken = default)
  252. {
  253. if (source == null)
  254. throw Error.ArgumentNull(nameof(source));
  255. if (selector == null)
  256. throw Error.ArgumentNull(nameof(selector));
  257. return SumCore(source, selector, cancellationToken);
  258. }
  259. public static Task<float> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<float>> selector, CancellationToken cancellationToken = default)
  260. {
  261. if (source == null)
  262. throw Error.ArgumentNull(nameof(source));
  263. if (selector == null)
  264. throw Error.ArgumentNull(nameof(selector));
  265. return SumCore(source, selector, cancellationToken);
  266. }
  267. #if !NO_DEEP_CANCELLATION
  268. public static Task<float> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<float>> selector, CancellationToken cancellationToken = default)
  269. {
  270. if (source == null)
  271. throw Error.ArgumentNull(nameof(source));
  272. if (selector == null)
  273. throw Error.ArgumentNull(nameof(selector));
  274. return SumCore(source, selector, cancellationToken);
  275. }
  276. #endif
  277. private static async Task<float> SumCore(IAsyncEnumerable<float> source, CancellationToken cancellationToken)
  278. {
  279. var sum = 0.0f;
  280. var e = source.GetAsyncEnumerator(cancellationToken);
  281. try
  282. {
  283. while (await e.MoveNextAsync().ConfigureAwait(false))
  284. {
  285. sum += e.Current;
  286. }
  287. }
  288. finally
  289. {
  290. await e.DisposeAsync().ConfigureAwait(false);
  291. }
  292. return sum;
  293. }
  294. private static async Task<float> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, float> selector, CancellationToken cancellationToken)
  295. {
  296. var sum = 0.0f;
  297. var e = source.GetAsyncEnumerator(cancellationToken);
  298. try
  299. {
  300. while (await e.MoveNextAsync().ConfigureAwait(false))
  301. {
  302. var value = selector(e.Current);
  303. sum += value;
  304. }
  305. }
  306. finally
  307. {
  308. await e.DisposeAsync().ConfigureAwait(false);
  309. }
  310. return sum;
  311. }
  312. private static async Task<float> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<float>> selector, CancellationToken cancellationToken)
  313. {
  314. var sum = 0.0f;
  315. var e = source.GetAsyncEnumerator(cancellationToken);
  316. try
  317. {
  318. while (await e.MoveNextAsync().ConfigureAwait(false))
  319. {
  320. var value = await selector(e.Current).ConfigureAwait(false);
  321. sum += value;
  322. }
  323. }
  324. finally
  325. {
  326. await e.DisposeAsync().ConfigureAwait(false);
  327. }
  328. return sum;
  329. }
  330. #if !NO_DEEP_CANCELLATION
  331. private static async Task<float> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<float>> selector, CancellationToken cancellationToken)
  332. {
  333. var sum = 0.0f;
  334. var e = source.GetAsyncEnumerator(cancellationToken);
  335. try
  336. {
  337. while (await e.MoveNextAsync().ConfigureAwait(false))
  338. {
  339. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  340. sum += value;
  341. }
  342. }
  343. finally
  344. {
  345. await e.DisposeAsync().ConfigureAwait(false);
  346. }
  347. return sum;
  348. }
  349. #endif
  350. public static Task<double> SumAsync(this IAsyncEnumerable<double> source, CancellationToken cancellationToken = default)
  351. {
  352. if (source == null)
  353. throw Error.ArgumentNull(nameof(source));
  354. return SumCore(source, cancellationToken);
  355. }
  356. public static Task<double> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, double> selector, CancellationToken cancellationToken = default)
  357. {
  358. if (source == null)
  359. throw Error.ArgumentNull(nameof(source));
  360. if (selector == null)
  361. throw Error.ArgumentNull(nameof(selector));
  362. return SumCore(source, selector, cancellationToken);
  363. }
  364. public static Task<double> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<double>> selector, CancellationToken cancellationToken = default)
  365. {
  366. if (source == null)
  367. throw Error.ArgumentNull(nameof(source));
  368. if (selector == null)
  369. throw Error.ArgumentNull(nameof(selector));
  370. return SumCore(source, selector, cancellationToken);
  371. }
  372. #if !NO_DEEP_CANCELLATION
  373. public static Task<double> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<double>> selector, CancellationToken cancellationToken = default)
  374. {
  375. if (source == null)
  376. throw Error.ArgumentNull(nameof(source));
  377. if (selector == null)
  378. throw Error.ArgumentNull(nameof(selector));
  379. return SumCore(source, selector, cancellationToken);
  380. }
  381. #endif
  382. private static async Task<double> SumCore(IAsyncEnumerable<double> source, CancellationToken cancellationToken)
  383. {
  384. var sum = 0.0;
  385. var e = source.GetAsyncEnumerator(cancellationToken);
  386. try
  387. {
  388. while (await e.MoveNextAsync().ConfigureAwait(false))
  389. {
  390. sum += e.Current;
  391. }
  392. }
  393. finally
  394. {
  395. await e.DisposeAsync().ConfigureAwait(false);
  396. }
  397. return sum;
  398. }
  399. private static async Task<double> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, double> selector, CancellationToken cancellationToken)
  400. {
  401. var sum = 0.0;
  402. var e = source.GetAsyncEnumerator(cancellationToken);
  403. try
  404. {
  405. while (await e.MoveNextAsync().ConfigureAwait(false))
  406. {
  407. var value = selector(e.Current);
  408. sum += value;
  409. }
  410. }
  411. finally
  412. {
  413. await e.DisposeAsync().ConfigureAwait(false);
  414. }
  415. return sum;
  416. }
  417. private static async Task<double> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<double>> selector, CancellationToken cancellationToken)
  418. {
  419. var sum = 0.0;
  420. var e = source.GetAsyncEnumerator(cancellationToken);
  421. try
  422. {
  423. while (await e.MoveNextAsync().ConfigureAwait(false))
  424. {
  425. var value = await selector(e.Current).ConfigureAwait(false);
  426. sum += value;
  427. }
  428. }
  429. finally
  430. {
  431. await e.DisposeAsync().ConfigureAwait(false);
  432. }
  433. return sum;
  434. }
  435. #if !NO_DEEP_CANCELLATION
  436. private static async Task<double> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<double>> selector, CancellationToken cancellationToken)
  437. {
  438. var sum = 0.0;
  439. var e = source.GetAsyncEnumerator(cancellationToken);
  440. try
  441. {
  442. while (await e.MoveNextAsync().ConfigureAwait(false))
  443. {
  444. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  445. sum += value;
  446. }
  447. }
  448. finally
  449. {
  450. await e.DisposeAsync().ConfigureAwait(false);
  451. }
  452. return sum;
  453. }
  454. #endif
  455. public static Task<decimal> SumAsync(this IAsyncEnumerable<decimal> source, CancellationToken cancellationToken = default)
  456. {
  457. if (source == null)
  458. throw Error.ArgumentNull(nameof(source));
  459. return SumCore(source, cancellationToken);
  460. }
  461. public static Task<decimal> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, decimal> selector, CancellationToken cancellationToken = default)
  462. {
  463. if (source == null)
  464. throw Error.ArgumentNull(nameof(source));
  465. if (selector == null)
  466. throw Error.ArgumentNull(nameof(selector));
  467. return SumCore(source, selector, cancellationToken);
  468. }
  469. public static Task<decimal> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<decimal>> selector, CancellationToken cancellationToken = default)
  470. {
  471. if (source == null)
  472. throw Error.ArgumentNull(nameof(source));
  473. if (selector == null)
  474. throw Error.ArgumentNull(nameof(selector));
  475. return SumCore(source, selector, cancellationToken);
  476. }
  477. #if !NO_DEEP_CANCELLATION
  478. public static Task<decimal> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<decimal>> selector, CancellationToken cancellationToken = default)
  479. {
  480. if (source == null)
  481. throw Error.ArgumentNull(nameof(source));
  482. if (selector == null)
  483. throw Error.ArgumentNull(nameof(selector));
  484. return SumCore(source, selector, cancellationToken);
  485. }
  486. #endif
  487. private static async Task<decimal> SumCore(IAsyncEnumerable<decimal> source, CancellationToken cancellationToken)
  488. {
  489. var sum = 0m;
  490. var e = source.GetAsyncEnumerator(cancellationToken);
  491. try
  492. {
  493. while (await e.MoveNextAsync().ConfigureAwait(false))
  494. {
  495. sum += e.Current;
  496. }
  497. }
  498. finally
  499. {
  500. await e.DisposeAsync().ConfigureAwait(false);
  501. }
  502. return sum;
  503. }
  504. private static async Task<decimal> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, decimal> selector, CancellationToken cancellationToken)
  505. {
  506. var sum = 0m;
  507. var e = source.GetAsyncEnumerator(cancellationToken);
  508. try
  509. {
  510. while (await e.MoveNextAsync().ConfigureAwait(false))
  511. {
  512. var value = selector(e.Current);
  513. sum += value;
  514. }
  515. }
  516. finally
  517. {
  518. await e.DisposeAsync().ConfigureAwait(false);
  519. }
  520. return sum;
  521. }
  522. private static async Task<decimal> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<decimal>> selector, CancellationToken cancellationToken)
  523. {
  524. var sum = 0m;
  525. var e = source.GetAsyncEnumerator(cancellationToken);
  526. try
  527. {
  528. while (await e.MoveNextAsync().ConfigureAwait(false))
  529. {
  530. var value = await selector(e.Current).ConfigureAwait(false);
  531. sum += value;
  532. }
  533. }
  534. finally
  535. {
  536. await e.DisposeAsync().ConfigureAwait(false);
  537. }
  538. return sum;
  539. }
  540. #if !NO_DEEP_CANCELLATION
  541. private static async Task<decimal> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<decimal>> selector, CancellationToken cancellationToken)
  542. {
  543. var sum = 0m;
  544. var e = source.GetAsyncEnumerator(cancellationToken);
  545. try
  546. {
  547. while (await e.MoveNextAsync().ConfigureAwait(false))
  548. {
  549. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  550. sum += value;
  551. }
  552. }
  553. finally
  554. {
  555. await e.DisposeAsync().ConfigureAwait(false);
  556. }
  557. return sum;
  558. }
  559. #endif
  560. public static Task<int?> SumAsync(this IAsyncEnumerable<int?> source, CancellationToken cancellationToken = default)
  561. {
  562. if (source == null)
  563. throw Error.ArgumentNull(nameof(source));
  564. return SumCore(source, cancellationToken);
  565. }
  566. public static Task<int?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, int?> selector, CancellationToken cancellationToken = default)
  567. {
  568. if (source == null)
  569. throw Error.ArgumentNull(nameof(source));
  570. if (selector == null)
  571. throw Error.ArgumentNull(nameof(selector));
  572. return SumCore(source, selector, cancellationToken);
  573. }
  574. public static Task<int?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<int?>> selector, CancellationToken cancellationToken = default)
  575. {
  576. if (source == null)
  577. throw Error.ArgumentNull(nameof(source));
  578. if (selector == null)
  579. throw Error.ArgumentNull(nameof(selector));
  580. return SumCore(source, selector, cancellationToken);
  581. }
  582. #if !NO_DEEP_CANCELLATION
  583. public static Task<int?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<int?>> selector, CancellationToken cancellationToken = default)
  584. {
  585. if (source == null)
  586. throw Error.ArgumentNull(nameof(source));
  587. if (selector == null)
  588. throw Error.ArgumentNull(nameof(selector));
  589. return SumCore(source, selector, cancellationToken);
  590. }
  591. #endif
  592. private static async Task<int?> SumCore(IAsyncEnumerable<int?> source, CancellationToken cancellationToken)
  593. {
  594. var sum = 0;
  595. var e = source.GetAsyncEnumerator(cancellationToken);
  596. try
  597. {
  598. while (await e.MoveNextAsync().ConfigureAwait(false))
  599. {
  600. checked
  601. {
  602. sum += e.Current.GetValueOrDefault();
  603. }
  604. }
  605. }
  606. finally
  607. {
  608. await e.DisposeAsync().ConfigureAwait(false);
  609. }
  610. return sum;
  611. }
  612. private static async Task<int?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, int?> selector, CancellationToken cancellationToken)
  613. {
  614. var sum = 0;
  615. var e = source.GetAsyncEnumerator(cancellationToken);
  616. try
  617. {
  618. while (await e.MoveNextAsync().ConfigureAwait(false))
  619. {
  620. var value = selector(e.Current);
  621. checked
  622. {
  623. sum += value.GetValueOrDefault();
  624. }
  625. }
  626. }
  627. finally
  628. {
  629. await e.DisposeAsync().ConfigureAwait(false);
  630. }
  631. return sum;
  632. }
  633. private static async Task<int?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<int?>> selector, CancellationToken cancellationToken)
  634. {
  635. var sum = 0;
  636. var e = source.GetAsyncEnumerator(cancellationToken);
  637. try
  638. {
  639. while (await e.MoveNextAsync().ConfigureAwait(false))
  640. {
  641. var value = await selector(e.Current).ConfigureAwait(false);
  642. checked
  643. {
  644. sum += value.GetValueOrDefault();
  645. }
  646. }
  647. }
  648. finally
  649. {
  650. await e.DisposeAsync().ConfigureAwait(false);
  651. }
  652. return sum;
  653. }
  654. #if !NO_DEEP_CANCELLATION
  655. private static async Task<int?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<int?>> selector, CancellationToken cancellationToken)
  656. {
  657. var sum = 0;
  658. var e = source.GetAsyncEnumerator(cancellationToken);
  659. try
  660. {
  661. while (await e.MoveNextAsync().ConfigureAwait(false))
  662. {
  663. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  664. checked
  665. {
  666. sum += value.GetValueOrDefault();
  667. }
  668. }
  669. }
  670. finally
  671. {
  672. await e.DisposeAsync().ConfigureAwait(false);
  673. }
  674. return sum;
  675. }
  676. #endif
  677. public static Task<long?> SumAsync(this IAsyncEnumerable<long?> source, CancellationToken cancellationToken = default)
  678. {
  679. if (source == null)
  680. throw Error.ArgumentNull(nameof(source));
  681. return SumCore(source, cancellationToken);
  682. }
  683. public static Task<long?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, long?> selector, CancellationToken cancellationToken = default)
  684. {
  685. if (source == null)
  686. throw Error.ArgumentNull(nameof(source));
  687. if (selector == null)
  688. throw Error.ArgumentNull(nameof(selector));
  689. return SumCore(source, selector, cancellationToken);
  690. }
  691. public static Task<long?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<long?>> selector, CancellationToken cancellationToken = default)
  692. {
  693. if (source == null)
  694. throw Error.ArgumentNull(nameof(source));
  695. if (selector == null)
  696. throw Error.ArgumentNull(nameof(selector));
  697. return SumCore(source, selector, cancellationToken);
  698. }
  699. #if !NO_DEEP_CANCELLATION
  700. public static Task<long?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<long?>> selector, CancellationToken cancellationToken = default)
  701. {
  702. if (source == null)
  703. throw Error.ArgumentNull(nameof(source));
  704. if (selector == null)
  705. throw Error.ArgumentNull(nameof(selector));
  706. return SumCore(source, selector, cancellationToken);
  707. }
  708. #endif
  709. private static async Task<long?> SumCore(IAsyncEnumerable<long?> source, CancellationToken cancellationToken)
  710. {
  711. var sum = 0L;
  712. var e = source.GetAsyncEnumerator(cancellationToken);
  713. try
  714. {
  715. while (await e.MoveNextAsync().ConfigureAwait(false))
  716. {
  717. checked
  718. {
  719. sum += e.Current.GetValueOrDefault();
  720. }
  721. }
  722. }
  723. finally
  724. {
  725. await e.DisposeAsync().ConfigureAwait(false);
  726. }
  727. return sum;
  728. }
  729. private static async Task<long?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, long?> selector, CancellationToken cancellationToken)
  730. {
  731. var sum = 0L;
  732. var e = source.GetAsyncEnumerator(cancellationToken);
  733. try
  734. {
  735. while (await e.MoveNextAsync().ConfigureAwait(false))
  736. {
  737. var value = selector(e.Current);
  738. checked
  739. {
  740. sum += value.GetValueOrDefault();
  741. }
  742. }
  743. }
  744. finally
  745. {
  746. await e.DisposeAsync().ConfigureAwait(false);
  747. }
  748. return sum;
  749. }
  750. private static async Task<long?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<long?>> selector, CancellationToken cancellationToken)
  751. {
  752. var sum = 0L;
  753. var e = source.GetAsyncEnumerator(cancellationToken);
  754. try
  755. {
  756. while (await e.MoveNextAsync().ConfigureAwait(false))
  757. {
  758. var value = await selector(e.Current).ConfigureAwait(false);
  759. checked
  760. {
  761. sum += value.GetValueOrDefault();
  762. }
  763. }
  764. }
  765. finally
  766. {
  767. await e.DisposeAsync().ConfigureAwait(false);
  768. }
  769. return sum;
  770. }
  771. #if !NO_DEEP_CANCELLATION
  772. private static async Task<long?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<long?>> selector, CancellationToken cancellationToken)
  773. {
  774. var sum = 0L;
  775. var e = source.GetAsyncEnumerator(cancellationToken);
  776. try
  777. {
  778. while (await e.MoveNextAsync().ConfigureAwait(false))
  779. {
  780. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  781. checked
  782. {
  783. sum += value.GetValueOrDefault();
  784. }
  785. }
  786. }
  787. finally
  788. {
  789. await e.DisposeAsync().ConfigureAwait(false);
  790. }
  791. return sum;
  792. }
  793. #endif
  794. public static Task<float?> SumAsync(this IAsyncEnumerable<float?> source, CancellationToken cancellationToken = default)
  795. {
  796. if (source == null)
  797. throw Error.ArgumentNull(nameof(source));
  798. return SumCore(source, cancellationToken);
  799. }
  800. public static Task<float?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, float?> selector, CancellationToken cancellationToken = default)
  801. {
  802. if (source == null)
  803. throw Error.ArgumentNull(nameof(source));
  804. if (selector == null)
  805. throw Error.ArgumentNull(nameof(selector));
  806. return SumCore(source, selector, cancellationToken);
  807. }
  808. public static Task<float?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<float?>> selector, CancellationToken cancellationToken = default)
  809. {
  810. if (source == null)
  811. throw Error.ArgumentNull(nameof(source));
  812. if (selector == null)
  813. throw Error.ArgumentNull(nameof(selector));
  814. return SumCore(source, selector, cancellationToken);
  815. }
  816. #if !NO_DEEP_CANCELLATION
  817. public static Task<float?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<float?>> selector, CancellationToken cancellationToken = default)
  818. {
  819. if (source == null)
  820. throw Error.ArgumentNull(nameof(source));
  821. if (selector == null)
  822. throw Error.ArgumentNull(nameof(selector));
  823. return SumCore(source, selector, cancellationToken);
  824. }
  825. #endif
  826. private static async Task<float?> SumCore(IAsyncEnumerable<float?> source, CancellationToken cancellationToken)
  827. {
  828. var sum = 0.0f;
  829. var e = source.GetAsyncEnumerator(cancellationToken);
  830. try
  831. {
  832. while (await e.MoveNextAsync().ConfigureAwait(false))
  833. {
  834. sum += e.Current.GetValueOrDefault();
  835. }
  836. }
  837. finally
  838. {
  839. await e.DisposeAsync().ConfigureAwait(false);
  840. }
  841. return sum;
  842. }
  843. private static async Task<float?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, float?> selector, CancellationToken cancellationToken)
  844. {
  845. var sum = 0.0f;
  846. var e = source.GetAsyncEnumerator(cancellationToken);
  847. try
  848. {
  849. while (await e.MoveNextAsync().ConfigureAwait(false))
  850. {
  851. var value = selector(e.Current);
  852. sum += value.GetValueOrDefault();
  853. }
  854. }
  855. finally
  856. {
  857. await e.DisposeAsync().ConfigureAwait(false);
  858. }
  859. return sum;
  860. }
  861. private static async Task<float?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<float?>> selector, CancellationToken cancellationToken)
  862. {
  863. var sum = 0.0f;
  864. var e = source.GetAsyncEnumerator(cancellationToken);
  865. try
  866. {
  867. while (await e.MoveNextAsync().ConfigureAwait(false))
  868. {
  869. var value = await selector(e.Current).ConfigureAwait(false);
  870. sum += value.GetValueOrDefault();
  871. }
  872. }
  873. finally
  874. {
  875. await e.DisposeAsync().ConfigureAwait(false);
  876. }
  877. return sum;
  878. }
  879. #if !NO_DEEP_CANCELLATION
  880. private static async Task<float?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<float?>> selector, CancellationToken cancellationToken)
  881. {
  882. var sum = 0.0f;
  883. var e = source.GetAsyncEnumerator(cancellationToken);
  884. try
  885. {
  886. while (await e.MoveNextAsync().ConfigureAwait(false))
  887. {
  888. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  889. sum += value.GetValueOrDefault();
  890. }
  891. }
  892. finally
  893. {
  894. await e.DisposeAsync().ConfigureAwait(false);
  895. }
  896. return sum;
  897. }
  898. #endif
  899. public static Task<double?> SumAsync(this IAsyncEnumerable<double?> source, CancellationToken cancellationToken = default)
  900. {
  901. if (source == null)
  902. throw Error.ArgumentNull(nameof(source));
  903. return SumCore(source, cancellationToken);
  904. }
  905. public static Task<double?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, double?> selector, CancellationToken cancellationToken = default)
  906. {
  907. if (source == null)
  908. throw Error.ArgumentNull(nameof(source));
  909. if (selector == null)
  910. throw Error.ArgumentNull(nameof(selector));
  911. return SumCore(source, selector, cancellationToken);
  912. }
  913. public static Task<double?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<double?>> selector, CancellationToken cancellationToken = default)
  914. {
  915. if (source == null)
  916. throw Error.ArgumentNull(nameof(source));
  917. if (selector == null)
  918. throw Error.ArgumentNull(nameof(selector));
  919. return SumCore(source, selector, cancellationToken);
  920. }
  921. #if !NO_DEEP_CANCELLATION
  922. public static Task<double?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<double?>> selector, CancellationToken cancellationToken = default)
  923. {
  924. if (source == null)
  925. throw Error.ArgumentNull(nameof(source));
  926. if (selector == null)
  927. throw Error.ArgumentNull(nameof(selector));
  928. return SumCore(source, selector, cancellationToken);
  929. }
  930. #endif
  931. private static async Task<double?> SumCore(IAsyncEnumerable<double?> source, CancellationToken cancellationToken)
  932. {
  933. var sum = 0.0;
  934. var e = source.GetAsyncEnumerator(cancellationToken);
  935. try
  936. {
  937. while (await e.MoveNextAsync().ConfigureAwait(false))
  938. {
  939. sum += e.Current.GetValueOrDefault();
  940. }
  941. }
  942. finally
  943. {
  944. await e.DisposeAsync().ConfigureAwait(false);
  945. }
  946. return sum;
  947. }
  948. private static async Task<double?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, double?> selector, CancellationToken cancellationToken)
  949. {
  950. var sum = 0.0;
  951. var e = source.GetAsyncEnumerator(cancellationToken);
  952. try
  953. {
  954. while (await e.MoveNextAsync().ConfigureAwait(false))
  955. {
  956. var value = selector(e.Current);
  957. sum += value.GetValueOrDefault();
  958. }
  959. }
  960. finally
  961. {
  962. await e.DisposeAsync().ConfigureAwait(false);
  963. }
  964. return sum;
  965. }
  966. private static async Task<double?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<double?>> selector, CancellationToken cancellationToken)
  967. {
  968. var sum = 0.0;
  969. var e = source.GetAsyncEnumerator(cancellationToken);
  970. try
  971. {
  972. while (await e.MoveNextAsync().ConfigureAwait(false))
  973. {
  974. var value = await selector(e.Current).ConfigureAwait(false);
  975. sum += value.GetValueOrDefault();
  976. }
  977. }
  978. finally
  979. {
  980. await e.DisposeAsync().ConfigureAwait(false);
  981. }
  982. return sum;
  983. }
  984. #if !NO_DEEP_CANCELLATION
  985. private static async Task<double?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<double?>> selector, CancellationToken cancellationToken)
  986. {
  987. var sum = 0.0;
  988. var e = source.GetAsyncEnumerator(cancellationToken);
  989. try
  990. {
  991. while (await e.MoveNextAsync().ConfigureAwait(false))
  992. {
  993. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  994. sum += value.GetValueOrDefault();
  995. }
  996. }
  997. finally
  998. {
  999. await e.DisposeAsync().ConfigureAwait(false);
  1000. }
  1001. return sum;
  1002. }
  1003. #endif
  1004. public static Task<decimal?> SumAsync(this IAsyncEnumerable<decimal?> source, CancellationToken cancellationToken = default)
  1005. {
  1006. if (source == null)
  1007. throw Error.ArgumentNull(nameof(source));
  1008. return SumCore(source, cancellationToken);
  1009. }
  1010. public static Task<decimal?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, decimal?> selector, CancellationToken cancellationToken = default)
  1011. {
  1012. if (source == null)
  1013. throw Error.ArgumentNull(nameof(source));
  1014. if (selector == null)
  1015. throw Error.ArgumentNull(nameof(selector));
  1016. return SumCore(source, selector, cancellationToken);
  1017. }
  1018. public static Task<decimal?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<decimal?>> selector, CancellationToken cancellationToken = default)
  1019. {
  1020. if (source == null)
  1021. throw Error.ArgumentNull(nameof(source));
  1022. if (selector == null)
  1023. throw Error.ArgumentNull(nameof(selector));
  1024. return SumCore(source, selector, cancellationToken);
  1025. }
  1026. #if !NO_DEEP_CANCELLATION
  1027. public static Task<decimal?> SumAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<decimal?>> selector, CancellationToken cancellationToken = default)
  1028. {
  1029. if (source == null)
  1030. throw Error.ArgumentNull(nameof(source));
  1031. if (selector == null)
  1032. throw Error.ArgumentNull(nameof(selector));
  1033. return SumCore(source, selector, cancellationToken);
  1034. }
  1035. #endif
  1036. private static async Task<decimal?> SumCore(IAsyncEnumerable<decimal?> source, CancellationToken cancellationToken)
  1037. {
  1038. var sum = 0m;
  1039. var e = source.GetAsyncEnumerator(cancellationToken);
  1040. try
  1041. {
  1042. while (await e.MoveNextAsync().ConfigureAwait(false))
  1043. {
  1044. sum += e.Current.GetValueOrDefault();
  1045. }
  1046. }
  1047. finally
  1048. {
  1049. await e.DisposeAsync().ConfigureAwait(false);
  1050. }
  1051. return sum;
  1052. }
  1053. private static async Task<decimal?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, decimal?> selector, CancellationToken cancellationToken)
  1054. {
  1055. var sum = 0m;
  1056. var e = source.GetAsyncEnumerator(cancellationToken);
  1057. try
  1058. {
  1059. while (await e.MoveNextAsync().ConfigureAwait(false))
  1060. {
  1061. var value = selector(e.Current);
  1062. sum += value.GetValueOrDefault();
  1063. }
  1064. }
  1065. finally
  1066. {
  1067. await e.DisposeAsync().ConfigureAwait(false);
  1068. }
  1069. return sum;
  1070. }
  1071. private static async Task<decimal?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<decimal?>> selector, CancellationToken cancellationToken)
  1072. {
  1073. var sum = 0m;
  1074. var e = source.GetAsyncEnumerator(cancellationToken);
  1075. try
  1076. {
  1077. while (await e.MoveNextAsync().ConfigureAwait(false))
  1078. {
  1079. var value = await selector(e.Current).ConfigureAwait(false);
  1080. sum += value.GetValueOrDefault();
  1081. }
  1082. }
  1083. finally
  1084. {
  1085. await e.DisposeAsync().ConfigureAwait(false);
  1086. }
  1087. return sum;
  1088. }
  1089. #if !NO_DEEP_CANCELLATION
  1090. private static async Task<decimal?> SumCore<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<decimal?>> selector, CancellationToken cancellationToken)
  1091. {
  1092. var sum = 0m;
  1093. var e = source.GetAsyncEnumerator(cancellationToken);
  1094. try
  1095. {
  1096. while (await e.MoveNextAsync().ConfigureAwait(false))
  1097. {
  1098. var value = await selector(e.Current, cancellationToken).ConfigureAwait(false);
  1099. sum += value.GetValueOrDefault();
  1100. }
  1101. }
  1102. finally
  1103. {
  1104. await e.DisposeAsync().ConfigureAwait(false);
  1105. }
  1106. return sum;
  1107. }
  1108. #endif
  1109. }
  1110. }