FromEvent.Generated.cs 70 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124
  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.Reactive.Concurrency;
  5. using System.Reactive.Disposables;
  6. using System.Threading.Tasks;
  7. namespace System.Reactive.Linq
  8. {
  9. public partial class AsyncObservable
  10. {
  11. public static IAsyncObservable<(T1 arg1, T2 arg2)> FromEvent<T1, T2>(Action<Action<T1, T2>> addHandler, Action<Action<T1, T2>> removeHandler)
  12. {
  13. if (addHandler == null)
  14. throw new ArgumentNullException(nameof(addHandler));
  15. if (removeHandler == null)
  16. throw new ArgumentNullException(nameof(removeHandler));
  17. return FromEventCore<Action<T1, T2>, T1, T2>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  18. }
  19. public static IAsyncObservable<(T1 arg1, T2 arg2)> FromEvent<T1, T2>(Action<Action<T1, T2>> addHandler, Action<Action<T1, T2>> removeHandler, IAsyncScheduler scheduler)
  20. {
  21. if (addHandler == null)
  22. throw new ArgumentNullException(nameof(addHandler));
  23. if (removeHandler == null)
  24. throw new ArgumentNullException(nameof(removeHandler));
  25. if (scheduler == null)
  26. throw new ArgumentNullException(nameof(scheduler));
  27. return FromEventCore<Action<T1, T2>, T1, T2>(h => h, addHandler, removeHandler, scheduler);
  28. }
  29. public static IAsyncObservable<(T1 arg1, T2 arg2)> FromEvent<TDelegate, T1, T2>(Func<Action<T1, T2>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  30. {
  31. if (conversion == null)
  32. throw new ArgumentNullException(nameof(conversion));
  33. if (addHandler == null)
  34. throw new ArgumentNullException(nameof(addHandler));
  35. if (removeHandler == null)
  36. throw new ArgumentNullException(nameof(removeHandler));
  37. return FromEventCore<TDelegate, T1, T2>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  38. }
  39. public static IAsyncObservable<(T1 arg1, T2 arg2)> FromEvent<TDelegate, T1, T2>(Func<Action<T1, T2>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  40. {
  41. if (conversion == null)
  42. throw new ArgumentNullException(nameof(conversion));
  43. if (addHandler == null)
  44. throw new ArgumentNullException(nameof(addHandler));
  45. if (removeHandler == null)
  46. throw new ArgumentNullException(nameof(removeHandler));
  47. if (scheduler == null)
  48. throw new ArgumentNullException(nameof(scheduler));
  49. return FromEventCore<TDelegate, T1, T2>(conversion, addHandler, removeHandler, scheduler);
  50. }
  51. private static IAsyncObservable<(T1 arg1, T2 arg2)> FromEventCore<TDelegate, T1, T2>(Func<Action<T1, T2>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  52. {
  53. return
  54. SynchronizeEvents(
  55. Create<(T1 arg1, T2 arg2)>(observer =>
  56. {
  57. var handler = new Action<T1, T2>((arg1, arg2) =>
  58. {
  59. observer.OnNextAsync((arg1, arg2)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  60. });
  61. var converted = conversion(handler);
  62. addHandler(converted);
  63. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  64. {
  65. removeHandler(converted);
  66. return default;
  67. }));
  68. }),
  69. scheduler
  70. );
  71. }
  72. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3)> FromEvent<T1, T2, T3>(Action<Action<T1, T2, T3>> addHandler, Action<Action<T1, T2, T3>> removeHandler)
  73. {
  74. if (addHandler == null)
  75. throw new ArgumentNullException(nameof(addHandler));
  76. if (removeHandler == null)
  77. throw new ArgumentNullException(nameof(removeHandler));
  78. return FromEventCore<Action<T1, T2, T3>, T1, T2, T3>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  79. }
  80. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3)> FromEvent<T1, T2, T3>(Action<Action<T1, T2, T3>> addHandler, Action<Action<T1, T2, T3>> removeHandler, IAsyncScheduler scheduler)
  81. {
  82. if (addHandler == null)
  83. throw new ArgumentNullException(nameof(addHandler));
  84. if (removeHandler == null)
  85. throw new ArgumentNullException(nameof(removeHandler));
  86. if (scheduler == null)
  87. throw new ArgumentNullException(nameof(scheduler));
  88. return FromEventCore<Action<T1, T2, T3>, T1, T2, T3>(h => h, addHandler, removeHandler, scheduler);
  89. }
  90. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3)> FromEvent<TDelegate, T1, T2, T3>(Func<Action<T1, T2, T3>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  91. {
  92. if (conversion == null)
  93. throw new ArgumentNullException(nameof(conversion));
  94. if (addHandler == null)
  95. throw new ArgumentNullException(nameof(addHandler));
  96. if (removeHandler == null)
  97. throw new ArgumentNullException(nameof(removeHandler));
  98. return FromEventCore<TDelegate, T1, T2, T3>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  99. }
  100. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3)> FromEvent<TDelegate, T1, T2, T3>(Func<Action<T1, T2, T3>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  101. {
  102. if (conversion == null)
  103. throw new ArgumentNullException(nameof(conversion));
  104. if (addHandler == null)
  105. throw new ArgumentNullException(nameof(addHandler));
  106. if (removeHandler == null)
  107. throw new ArgumentNullException(nameof(removeHandler));
  108. if (scheduler == null)
  109. throw new ArgumentNullException(nameof(scheduler));
  110. return FromEventCore<TDelegate, T1, T2, T3>(conversion, addHandler, removeHandler, scheduler);
  111. }
  112. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3)> FromEventCore<TDelegate, T1, T2, T3>(Func<Action<T1, T2, T3>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  113. {
  114. return
  115. SynchronizeEvents(
  116. Create<(T1 arg1, T2 arg2, T3 arg3)>(observer =>
  117. {
  118. var handler = new Action<T1, T2, T3>((arg1, arg2, arg3) =>
  119. {
  120. observer.OnNextAsync((arg1, arg2, arg3)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  121. });
  122. var converted = conversion(handler);
  123. addHandler(converted);
  124. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  125. {
  126. removeHandler(converted);
  127. return default;
  128. }));
  129. }),
  130. scheduler
  131. );
  132. }
  133. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4)> FromEvent<T1, T2, T3, T4>(Action<Action<T1, T2, T3, T4>> addHandler, Action<Action<T1, T2, T3, T4>> removeHandler)
  134. {
  135. if (addHandler == null)
  136. throw new ArgumentNullException(nameof(addHandler));
  137. if (removeHandler == null)
  138. throw new ArgumentNullException(nameof(removeHandler));
  139. return FromEventCore<Action<T1, T2, T3, T4>, T1, T2, T3, T4>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  140. }
  141. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4)> FromEvent<T1, T2, T3, T4>(Action<Action<T1, T2, T3, T4>> addHandler, Action<Action<T1, T2, T3, T4>> removeHandler, IAsyncScheduler scheduler)
  142. {
  143. if (addHandler == null)
  144. throw new ArgumentNullException(nameof(addHandler));
  145. if (removeHandler == null)
  146. throw new ArgumentNullException(nameof(removeHandler));
  147. if (scheduler == null)
  148. throw new ArgumentNullException(nameof(scheduler));
  149. return FromEventCore<Action<T1, T2, T3, T4>, T1, T2, T3, T4>(h => h, addHandler, removeHandler, scheduler);
  150. }
  151. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4)> FromEvent<TDelegate, T1, T2, T3, T4>(Func<Action<T1, T2, T3, T4>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  152. {
  153. if (conversion == null)
  154. throw new ArgumentNullException(nameof(conversion));
  155. if (addHandler == null)
  156. throw new ArgumentNullException(nameof(addHandler));
  157. if (removeHandler == null)
  158. throw new ArgumentNullException(nameof(removeHandler));
  159. return FromEventCore<TDelegate, T1, T2, T3, T4>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  160. }
  161. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4)> FromEvent<TDelegate, T1, T2, T3, T4>(Func<Action<T1, T2, T3, T4>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  162. {
  163. if (conversion == null)
  164. throw new ArgumentNullException(nameof(conversion));
  165. if (addHandler == null)
  166. throw new ArgumentNullException(nameof(addHandler));
  167. if (removeHandler == null)
  168. throw new ArgumentNullException(nameof(removeHandler));
  169. if (scheduler == null)
  170. throw new ArgumentNullException(nameof(scheduler));
  171. return FromEventCore<TDelegate, T1, T2, T3, T4>(conversion, addHandler, removeHandler, scheduler);
  172. }
  173. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4)> FromEventCore<TDelegate, T1, T2, T3, T4>(Func<Action<T1, T2, T3, T4>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  174. {
  175. return
  176. SynchronizeEvents(
  177. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4)>(observer =>
  178. {
  179. var handler = new Action<T1, T2, T3, T4>((arg1, arg2, arg3, arg4) =>
  180. {
  181. observer.OnNextAsync((arg1, arg2, arg3, arg4)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  182. });
  183. var converted = conversion(handler);
  184. addHandler(converted);
  185. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  186. {
  187. removeHandler(converted);
  188. return default;
  189. }));
  190. }),
  191. scheduler
  192. );
  193. }
  194. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)> FromEvent<T1, T2, T3, T4, T5>(Action<Action<T1, T2, T3, T4, T5>> addHandler, Action<Action<T1, T2, T3, T4, T5>> removeHandler)
  195. {
  196. if (addHandler == null)
  197. throw new ArgumentNullException(nameof(addHandler));
  198. if (removeHandler == null)
  199. throw new ArgumentNullException(nameof(removeHandler));
  200. return FromEventCore<Action<T1, T2, T3, T4, T5>, T1, T2, T3, T4, T5>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  201. }
  202. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)> FromEvent<T1, T2, T3, T4, T5>(Action<Action<T1, T2, T3, T4, T5>> addHandler, Action<Action<T1, T2, T3, T4, T5>> removeHandler, IAsyncScheduler scheduler)
  203. {
  204. if (addHandler == null)
  205. throw new ArgumentNullException(nameof(addHandler));
  206. if (removeHandler == null)
  207. throw new ArgumentNullException(nameof(removeHandler));
  208. if (scheduler == null)
  209. throw new ArgumentNullException(nameof(scheduler));
  210. return FromEventCore<Action<T1, T2, T3, T4, T5>, T1, T2, T3, T4, T5>(h => h, addHandler, removeHandler, scheduler);
  211. }
  212. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)> FromEvent<TDelegate, T1, T2, T3, T4, T5>(Func<Action<T1, T2, T3, T4, T5>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  213. {
  214. if (conversion == null)
  215. throw new ArgumentNullException(nameof(conversion));
  216. if (addHandler == null)
  217. throw new ArgumentNullException(nameof(addHandler));
  218. if (removeHandler == null)
  219. throw new ArgumentNullException(nameof(removeHandler));
  220. return FromEventCore<TDelegate, T1, T2, T3, T4, T5>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  221. }
  222. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)> FromEvent<TDelegate, T1, T2, T3, T4, T5>(Func<Action<T1, T2, T3, T4, T5>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  223. {
  224. if (conversion == null)
  225. throw new ArgumentNullException(nameof(conversion));
  226. if (addHandler == null)
  227. throw new ArgumentNullException(nameof(addHandler));
  228. if (removeHandler == null)
  229. throw new ArgumentNullException(nameof(removeHandler));
  230. if (scheduler == null)
  231. throw new ArgumentNullException(nameof(scheduler));
  232. return FromEventCore<TDelegate, T1, T2, T3, T4, T5>(conversion, addHandler, removeHandler, scheduler);
  233. }
  234. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)> FromEventCore<TDelegate, T1, T2, T3, T4, T5>(Func<Action<T1, T2, T3, T4, T5>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  235. {
  236. return
  237. SynchronizeEvents(
  238. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)>(observer =>
  239. {
  240. var handler = new Action<T1, T2, T3, T4, T5>((arg1, arg2, arg3, arg4, arg5) =>
  241. {
  242. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  243. });
  244. var converted = conversion(handler);
  245. addHandler(converted);
  246. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  247. {
  248. removeHandler(converted);
  249. return default;
  250. }));
  251. }),
  252. scheduler
  253. );
  254. }
  255. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)> FromEvent<T1, T2, T3, T4, T5, T6>(Action<Action<T1, T2, T3, T4, T5, T6>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6>> removeHandler)
  256. {
  257. if (addHandler == null)
  258. throw new ArgumentNullException(nameof(addHandler));
  259. if (removeHandler == null)
  260. throw new ArgumentNullException(nameof(removeHandler));
  261. return FromEventCore<Action<T1, T2, T3, T4, T5, T6>, T1, T2, T3, T4, T5, T6>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  262. }
  263. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)> FromEvent<T1, T2, T3, T4, T5, T6>(Action<Action<T1, T2, T3, T4, T5, T6>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6>> removeHandler, IAsyncScheduler scheduler)
  264. {
  265. if (addHandler == null)
  266. throw new ArgumentNullException(nameof(addHandler));
  267. if (removeHandler == null)
  268. throw new ArgumentNullException(nameof(removeHandler));
  269. if (scheduler == null)
  270. throw new ArgumentNullException(nameof(scheduler));
  271. return FromEventCore<Action<T1, T2, T3, T4, T5, T6>, T1, T2, T3, T4, T5, T6>(h => h, addHandler, removeHandler, scheduler);
  272. }
  273. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6>(Func<Action<T1, T2, T3, T4, T5, T6>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  274. {
  275. if (conversion == null)
  276. throw new ArgumentNullException(nameof(conversion));
  277. if (addHandler == null)
  278. throw new ArgumentNullException(nameof(addHandler));
  279. if (removeHandler == null)
  280. throw new ArgumentNullException(nameof(removeHandler));
  281. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  282. }
  283. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6>(Func<Action<T1, T2, T3, T4, T5, T6>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  284. {
  285. if (conversion == null)
  286. throw new ArgumentNullException(nameof(conversion));
  287. if (addHandler == null)
  288. throw new ArgumentNullException(nameof(addHandler));
  289. if (removeHandler == null)
  290. throw new ArgumentNullException(nameof(removeHandler));
  291. if (scheduler == null)
  292. throw new ArgumentNullException(nameof(scheduler));
  293. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6>(conversion, addHandler, removeHandler, scheduler);
  294. }
  295. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6>(Func<Action<T1, T2, T3, T4, T5, T6>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  296. {
  297. return
  298. SynchronizeEvents(
  299. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)>(observer =>
  300. {
  301. var handler = new Action<T1, T2, T3, T4, T5, T6>((arg1, arg2, arg3, arg4, arg5, arg6) =>
  302. {
  303. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  304. });
  305. var converted = conversion(handler);
  306. addHandler(converted);
  307. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  308. {
  309. removeHandler(converted);
  310. return default;
  311. }));
  312. }),
  313. scheduler
  314. );
  315. }
  316. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)> FromEvent<T1, T2, T3, T4, T5, T6, T7>(Action<Action<T1, T2, T3, T4, T5, T6, T7>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7>> removeHandler)
  317. {
  318. if (addHandler == null)
  319. throw new ArgumentNullException(nameof(addHandler));
  320. if (removeHandler == null)
  321. throw new ArgumentNullException(nameof(removeHandler));
  322. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7>, T1, T2, T3, T4, T5, T6, T7>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  323. }
  324. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)> FromEvent<T1, T2, T3, T4, T5, T6, T7>(Action<Action<T1, T2, T3, T4, T5, T6, T7>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7>> removeHandler, IAsyncScheduler scheduler)
  325. {
  326. if (addHandler == null)
  327. throw new ArgumentNullException(nameof(addHandler));
  328. if (removeHandler == null)
  329. throw new ArgumentNullException(nameof(removeHandler));
  330. if (scheduler == null)
  331. throw new ArgumentNullException(nameof(scheduler));
  332. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7>, T1, T2, T3, T4, T5, T6, T7>(h => h, addHandler, removeHandler, scheduler);
  333. }
  334. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7>(Func<Action<T1, T2, T3, T4, T5, T6, T7>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  335. {
  336. if (conversion == null)
  337. throw new ArgumentNullException(nameof(conversion));
  338. if (addHandler == null)
  339. throw new ArgumentNullException(nameof(addHandler));
  340. if (removeHandler == null)
  341. throw new ArgumentNullException(nameof(removeHandler));
  342. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  343. }
  344. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7>(Func<Action<T1, T2, T3, T4, T5, T6, T7>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  345. {
  346. if (conversion == null)
  347. throw new ArgumentNullException(nameof(conversion));
  348. if (addHandler == null)
  349. throw new ArgumentNullException(nameof(addHandler));
  350. if (removeHandler == null)
  351. throw new ArgumentNullException(nameof(removeHandler));
  352. if (scheduler == null)
  353. throw new ArgumentNullException(nameof(scheduler));
  354. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7>(conversion, addHandler, removeHandler, scheduler);
  355. }
  356. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7>(Func<Action<T1, T2, T3, T4, T5, T6, T7>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  357. {
  358. return
  359. SynchronizeEvents(
  360. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)>(observer =>
  361. {
  362. var handler = new Action<T1, T2, T3, T4, T5, T6, T7>((arg1, arg2, arg3, arg4, arg5, arg6, arg7) =>
  363. {
  364. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  365. });
  366. var converted = conversion(handler);
  367. addHandler(converted);
  368. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  369. {
  370. removeHandler(converted);
  371. return default;
  372. }));
  373. }),
  374. scheduler
  375. );
  376. }
  377. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8>> removeHandler)
  378. {
  379. if (addHandler == null)
  380. throw new ArgumentNullException(nameof(addHandler));
  381. if (removeHandler == null)
  382. throw new ArgumentNullException(nameof(removeHandler));
  383. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8>, T1, T2, T3, T4, T5, T6, T7, T8>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  384. }
  385. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8>> removeHandler, IAsyncScheduler scheduler)
  386. {
  387. if (addHandler == null)
  388. throw new ArgumentNullException(nameof(addHandler));
  389. if (removeHandler == null)
  390. throw new ArgumentNullException(nameof(removeHandler));
  391. if (scheduler == null)
  392. throw new ArgumentNullException(nameof(scheduler));
  393. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8>, T1, T2, T3, T4, T5, T6, T7, T8>(h => h, addHandler, removeHandler, scheduler);
  394. }
  395. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  396. {
  397. if (conversion == null)
  398. throw new ArgumentNullException(nameof(conversion));
  399. if (addHandler == null)
  400. throw new ArgumentNullException(nameof(addHandler));
  401. if (removeHandler == null)
  402. throw new ArgumentNullException(nameof(removeHandler));
  403. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  404. }
  405. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  406. {
  407. if (conversion == null)
  408. throw new ArgumentNullException(nameof(conversion));
  409. if (addHandler == null)
  410. throw new ArgumentNullException(nameof(addHandler));
  411. if (removeHandler == null)
  412. throw new ArgumentNullException(nameof(removeHandler));
  413. if (scheduler == null)
  414. throw new ArgumentNullException(nameof(scheduler));
  415. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8>(conversion, addHandler, removeHandler, scheduler);
  416. }
  417. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  418. {
  419. return
  420. SynchronizeEvents(
  421. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)>(observer =>
  422. {
  423. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) =>
  424. {
  425. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  426. });
  427. var converted = conversion(handler);
  428. addHandler(converted);
  429. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  430. {
  431. removeHandler(converted);
  432. return default;
  433. }));
  434. }),
  435. scheduler
  436. );
  437. }
  438. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>> removeHandler)
  439. {
  440. if (addHandler == null)
  441. throw new ArgumentNullException(nameof(addHandler));
  442. if (removeHandler == null)
  443. throw new ArgumentNullException(nameof(removeHandler));
  444. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>, T1, T2, T3, T4, T5, T6, T7, T8, T9>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  445. }
  446. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>> removeHandler, IAsyncScheduler scheduler)
  447. {
  448. if (addHandler == null)
  449. throw new ArgumentNullException(nameof(addHandler));
  450. if (removeHandler == null)
  451. throw new ArgumentNullException(nameof(removeHandler));
  452. if (scheduler == null)
  453. throw new ArgumentNullException(nameof(scheduler));
  454. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>, T1, T2, T3, T4, T5, T6, T7, T8, T9>(h => h, addHandler, removeHandler, scheduler);
  455. }
  456. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  457. {
  458. if (conversion == null)
  459. throw new ArgumentNullException(nameof(conversion));
  460. if (addHandler == null)
  461. throw new ArgumentNullException(nameof(addHandler));
  462. if (removeHandler == null)
  463. throw new ArgumentNullException(nameof(removeHandler));
  464. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  465. }
  466. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  467. {
  468. if (conversion == null)
  469. throw new ArgumentNullException(nameof(conversion));
  470. if (addHandler == null)
  471. throw new ArgumentNullException(nameof(addHandler));
  472. if (removeHandler == null)
  473. throw new ArgumentNullException(nameof(removeHandler));
  474. if (scheduler == null)
  475. throw new ArgumentNullException(nameof(scheduler));
  476. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9>(conversion, addHandler, removeHandler, scheduler);
  477. }
  478. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  479. {
  480. return
  481. SynchronizeEvents(
  482. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)>(observer =>
  483. {
  484. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) =>
  485. {
  486. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  487. });
  488. var converted = conversion(handler);
  489. addHandler(converted);
  490. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  491. {
  492. removeHandler(converted);
  493. return default;
  494. }));
  495. }),
  496. scheduler
  497. );
  498. }
  499. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>> removeHandler)
  500. {
  501. if (addHandler == null)
  502. throw new ArgumentNullException(nameof(addHandler));
  503. if (removeHandler == null)
  504. throw new ArgumentNullException(nameof(removeHandler));
  505. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  506. }
  507. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>> removeHandler, IAsyncScheduler scheduler)
  508. {
  509. if (addHandler == null)
  510. throw new ArgumentNullException(nameof(addHandler));
  511. if (removeHandler == null)
  512. throw new ArgumentNullException(nameof(removeHandler));
  513. if (scheduler == null)
  514. throw new ArgumentNullException(nameof(scheduler));
  515. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(h => h, addHandler, removeHandler, scheduler);
  516. }
  517. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  518. {
  519. if (conversion == null)
  520. throw new ArgumentNullException(nameof(conversion));
  521. if (addHandler == null)
  522. throw new ArgumentNullException(nameof(addHandler));
  523. if (removeHandler == null)
  524. throw new ArgumentNullException(nameof(removeHandler));
  525. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  526. }
  527. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  528. {
  529. if (conversion == null)
  530. throw new ArgumentNullException(nameof(conversion));
  531. if (addHandler == null)
  532. throw new ArgumentNullException(nameof(addHandler));
  533. if (removeHandler == null)
  534. throw new ArgumentNullException(nameof(removeHandler));
  535. if (scheduler == null)
  536. throw new ArgumentNullException(nameof(scheduler));
  537. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(conversion, addHandler, removeHandler, scheduler);
  538. }
  539. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  540. {
  541. return
  542. SynchronizeEvents(
  543. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)>(observer =>
  544. {
  545. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) =>
  546. {
  547. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  548. });
  549. var converted = conversion(handler);
  550. addHandler(converted);
  551. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  552. {
  553. removeHandler(converted);
  554. return default;
  555. }));
  556. }),
  557. scheduler
  558. );
  559. }
  560. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>> removeHandler)
  561. {
  562. if (addHandler == null)
  563. throw new ArgumentNullException(nameof(addHandler));
  564. if (removeHandler == null)
  565. throw new ArgumentNullException(nameof(removeHandler));
  566. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  567. }
  568. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>> removeHandler, IAsyncScheduler scheduler)
  569. {
  570. if (addHandler == null)
  571. throw new ArgumentNullException(nameof(addHandler));
  572. if (removeHandler == null)
  573. throw new ArgumentNullException(nameof(removeHandler));
  574. if (scheduler == null)
  575. throw new ArgumentNullException(nameof(scheduler));
  576. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(h => h, addHandler, removeHandler, scheduler);
  577. }
  578. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  579. {
  580. if (conversion == null)
  581. throw new ArgumentNullException(nameof(conversion));
  582. if (addHandler == null)
  583. throw new ArgumentNullException(nameof(addHandler));
  584. if (removeHandler == null)
  585. throw new ArgumentNullException(nameof(removeHandler));
  586. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  587. }
  588. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  589. {
  590. if (conversion == null)
  591. throw new ArgumentNullException(nameof(conversion));
  592. if (addHandler == null)
  593. throw new ArgumentNullException(nameof(addHandler));
  594. if (removeHandler == null)
  595. throw new ArgumentNullException(nameof(removeHandler));
  596. if (scheduler == null)
  597. throw new ArgumentNullException(nameof(scheduler));
  598. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(conversion, addHandler, removeHandler, scheduler);
  599. }
  600. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  601. {
  602. return
  603. SynchronizeEvents(
  604. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)>(observer =>
  605. {
  606. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) =>
  607. {
  608. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  609. });
  610. var converted = conversion(handler);
  611. addHandler(converted);
  612. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  613. {
  614. removeHandler(converted);
  615. return default;
  616. }));
  617. }),
  618. scheduler
  619. );
  620. }
  621. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>> removeHandler)
  622. {
  623. if (addHandler == null)
  624. throw new ArgumentNullException(nameof(addHandler));
  625. if (removeHandler == null)
  626. throw new ArgumentNullException(nameof(removeHandler));
  627. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  628. }
  629. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>> removeHandler, IAsyncScheduler scheduler)
  630. {
  631. if (addHandler == null)
  632. throw new ArgumentNullException(nameof(addHandler));
  633. if (removeHandler == null)
  634. throw new ArgumentNullException(nameof(removeHandler));
  635. if (scheduler == null)
  636. throw new ArgumentNullException(nameof(scheduler));
  637. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(h => h, addHandler, removeHandler, scheduler);
  638. }
  639. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  640. {
  641. if (conversion == null)
  642. throw new ArgumentNullException(nameof(conversion));
  643. if (addHandler == null)
  644. throw new ArgumentNullException(nameof(addHandler));
  645. if (removeHandler == null)
  646. throw new ArgumentNullException(nameof(removeHandler));
  647. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  648. }
  649. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  650. {
  651. if (conversion == null)
  652. throw new ArgumentNullException(nameof(conversion));
  653. if (addHandler == null)
  654. throw new ArgumentNullException(nameof(addHandler));
  655. if (removeHandler == null)
  656. throw new ArgumentNullException(nameof(removeHandler));
  657. if (scheduler == null)
  658. throw new ArgumentNullException(nameof(scheduler));
  659. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(conversion, addHandler, removeHandler, scheduler);
  660. }
  661. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  662. {
  663. return
  664. SynchronizeEvents(
  665. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)>(observer =>
  666. {
  667. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) =>
  668. {
  669. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  670. });
  671. var converted = conversion(handler);
  672. addHandler(converted);
  673. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  674. {
  675. removeHandler(converted);
  676. return default;
  677. }));
  678. }),
  679. scheduler
  680. );
  681. }
  682. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>> removeHandler)
  683. {
  684. if (addHandler == null)
  685. throw new ArgumentNullException(nameof(addHandler));
  686. if (removeHandler == null)
  687. throw new ArgumentNullException(nameof(removeHandler));
  688. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  689. }
  690. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>> removeHandler, IAsyncScheduler scheduler)
  691. {
  692. if (addHandler == null)
  693. throw new ArgumentNullException(nameof(addHandler));
  694. if (removeHandler == null)
  695. throw new ArgumentNullException(nameof(removeHandler));
  696. if (scheduler == null)
  697. throw new ArgumentNullException(nameof(scheduler));
  698. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(h => h, addHandler, removeHandler, scheduler);
  699. }
  700. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  701. {
  702. if (conversion == null)
  703. throw new ArgumentNullException(nameof(conversion));
  704. if (addHandler == null)
  705. throw new ArgumentNullException(nameof(addHandler));
  706. if (removeHandler == null)
  707. throw new ArgumentNullException(nameof(removeHandler));
  708. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  709. }
  710. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  711. {
  712. if (conversion == null)
  713. throw new ArgumentNullException(nameof(conversion));
  714. if (addHandler == null)
  715. throw new ArgumentNullException(nameof(addHandler));
  716. if (removeHandler == null)
  717. throw new ArgumentNullException(nameof(removeHandler));
  718. if (scheduler == null)
  719. throw new ArgumentNullException(nameof(scheduler));
  720. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(conversion, addHandler, removeHandler, scheduler);
  721. }
  722. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  723. {
  724. return
  725. SynchronizeEvents(
  726. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)>(observer =>
  727. {
  728. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13) =>
  729. {
  730. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  731. });
  732. var converted = conversion(handler);
  733. addHandler(converted);
  734. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  735. {
  736. removeHandler(converted);
  737. return default;
  738. }));
  739. }),
  740. scheduler
  741. );
  742. }
  743. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>> removeHandler)
  744. {
  745. if (addHandler == null)
  746. throw new ArgumentNullException(nameof(addHandler));
  747. if (removeHandler == null)
  748. throw new ArgumentNullException(nameof(removeHandler));
  749. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  750. }
  751. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>> removeHandler, IAsyncScheduler scheduler)
  752. {
  753. if (addHandler == null)
  754. throw new ArgumentNullException(nameof(addHandler));
  755. if (removeHandler == null)
  756. throw new ArgumentNullException(nameof(removeHandler));
  757. if (scheduler == null)
  758. throw new ArgumentNullException(nameof(scheduler));
  759. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(h => h, addHandler, removeHandler, scheduler);
  760. }
  761. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  762. {
  763. if (conversion == null)
  764. throw new ArgumentNullException(nameof(conversion));
  765. if (addHandler == null)
  766. throw new ArgumentNullException(nameof(addHandler));
  767. if (removeHandler == null)
  768. throw new ArgumentNullException(nameof(removeHandler));
  769. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  770. }
  771. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  772. {
  773. if (conversion == null)
  774. throw new ArgumentNullException(nameof(conversion));
  775. if (addHandler == null)
  776. throw new ArgumentNullException(nameof(addHandler));
  777. if (removeHandler == null)
  778. throw new ArgumentNullException(nameof(removeHandler));
  779. if (scheduler == null)
  780. throw new ArgumentNullException(nameof(scheduler));
  781. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(conversion, addHandler, removeHandler, scheduler);
  782. }
  783. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  784. {
  785. return
  786. SynchronizeEvents(
  787. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)>(observer =>
  788. {
  789. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14) =>
  790. {
  791. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  792. });
  793. var converted = conversion(handler);
  794. addHandler(converted);
  795. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  796. {
  797. removeHandler(converted);
  798. return default;
  799. }));
  800. }),
  801. scheduler
  802. );
  803. }
  804. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>> removeHandler)
  805. {
  806. if (addHandler == null)
  807. throw new ArgumentNullException(nameof(addHandler));
  808. if (removeHandler == null)
  809. throw new ArgumentNullException(nameof(removeHandler));
  810. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  811. }
  812. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>> removeHandler, IAsyncScheduler scheduler)
  813. {
  814. if (addHandler == null)
  815. throw new ArgumentNullException(nameof(addHandler));
  816. if (removeHandler == null)
  817. throw new ArgumentNullException(nameof(removeHandler));
  818. if (scheduler == null)
  819. throw new ArgumentNullException(nameof(scheduler));
  820. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(h => h, addHandler, removeHandler, scheduler);
  821. }
  822. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  823. {
  824. if (conversion == null)
  825. throw new ArgumentNullException(nameof(conversion));
  826. if (addHandler == null)
  827. throw new ArgumentNullException(nameof(addHandler));
  828. if (removeHandler == null)
  829. throw new ArgumentNullException(nameof(removeHandler));
  830. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  831. }
  832. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  833. {
  834. if (conversion == null)
  835. throw new ArgumentNullException(nameof(conversion));
  836. if (addHandler == null)
  837. throw new ArgumentNullException(nameof(addHandler));
  838. if (removeHandler == null)
  839. throw new ArgumentNullException(nameof(removeHandler));
  840. if (scheduler == null)
  841. throw new ArgumentNullException(nameof(scheduler));
  842. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(conversion, addHandler, removeHandler, scheduler);
  843. }
  844. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  845. {
  846. return
  847. SynchronizeEvents(
  848. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)>(observer =>
  849. {
  850. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15) =>
  851. {
  852. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  853. });
  854. var converted = conversion(handler);
  855. addHandler(converted);
  856. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  857. {
  858. removeHandler(converted);
  859. return default;
  860. }));
  861. }),
  862. scheduler
  863. );
  864. }
  865. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>> removeHandler)
  866. {
  867. if (addHandler == null)
  868. throw new ArgumentNullException(nameof(addHandler));
  869. if (removeHandler == null)
  870. throw new ArgumentNullException(nameof(removeHandler));
  871. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(h => h, addHandler, removeHandler, GetSchedulerForCurrentContext());
  872. }
  873. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)> FromEvent<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>> addHandler, Action<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>> removeHandler, IAsyncScheduler scheduler)
  874. {
  875. if (addHandler == null)
  876. throw new ArgumentNullException(nameof(addHandler));
  877. if (removeHandler == null)
  878. throw new ArgumentNullException(nameof(removeHandler));
  879. if (scheduler == null)
  880. throw new ArgumentNullException(nameof(scheduler));
  881. return FromEventCore<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(h => h, addHandler, removeHandler, scheduler);
  882. }
  883. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
  884. {
  885. if (conversion == null)
  886. throw new ArgumentNullException(nameof(conversion));
  887. if (addHandler == null)
  888. throw new ArgumentNullException(nameof(addHandler));
  889. if (removeHandler == null)
  890. throw new ArgumentNullException(nameof(removeHandler));
  891. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(conversion, addHandler, removeHandler, GetSchedulerForCurrentContext());
  892. }
  893. public static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)> FromEvent<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  894. {
  895. if (conversion == null)
  896. throw new ArgumentNullException(nameof(conversion));
  897. if (addHandler == null)
  898. throw new ArgumentNullException(nameof(addHandler));
  899. if (removeHandler == null)
  900. throw new ArgumentNullException(nameof(removeHandler));
  901. if (scheduler == null)
  902. throw new ArgumentNullException(nameof(scheduler));
  903. return FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(conversion, addHandler, removeHandler, scheduler);
  904. }
  905. private static IAsyncObservable<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)> FromEventCore<TDelegate, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(Func<Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler, IAsyncScheduler scheduler)
  906. {
  907. return
  908. SynchronizeEvents(
  909. Create<(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)>(observer =>
  910. {
  911. var handler = new Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16) =>
  912. {
  913. observer.OnNextAsync((arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16)); // REVIEW: Fire-and-forget can lead to out of order processing, and observers may reject these calls as "busy".
  914. });
  915. var converted = conversion(handler);
  916. addHandler(converted);
  917. return new ValueTask<IAsyncDisposable>(AsyncDisposable.Create(() =>
  918. {
  919. removeHandler(converted);
  920. return default;
  921. }));
  922. }),
  923. scheduler
  924. );
  925. }
  926. }
  927. }