Sum.Generated.cs 42 KB

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