Browse Source

Merge main into feature/bash-to-async-immutable

Ian Griffiths 1 year ago
parent
commit
4822f9f514
100 changed files with 230 additions and 474 deletions
  1. 6 2
      .editorconfig
  2. 2 2
      .github/PULL_REQUEST_TEMPLATE.md
  3. 12 0
      .gitignore
  4. 5 1
      AUTHORS.txt
  5. 4 4
      AsyncRx.NET/ApiCompare/ApiCompare.csproj
  6. 2 2
      AsyncRx.NET/ApiCompare/Program.cs
  7. 2 122
      AsyncRx.NET/AsyncRx.NET.sln
  8. 1 2
      AsyncRx.NET/Directory.build.props
  9. 64 0
      AsyncRx.NET/Documentation/adr/0001-package-unification.md
  10. 4 0
      AsyncRx.NET/Playground/Playground.csproj
  11. 33 33
      AsyncRx.NET/Playground/Program.cs
  12. 0 13
      AsyncRx.NET/System.Reactive.Async.Concurrency/System.Reactive.Async.Concurrency.csproj
  13. 0 13
      AsyncRx.NET/System.Reactive.Async.Core/System.Reactive.Async.Core.csproj
  14. 0 12
      AsyncRx.NET/System.Reactive.Async.Disposables/System.Reactive.Async.Disposables.csproj
  15. 0 7
      AsyncRx.NET/System.Reactive.Async.Interfaces/System.Reactive.Async.Interfaces.csproj
  16. 0 143
      AsyncRx.NET/System.Reactive.Async.Linq/System.Reactive.Async.Linq.csproj
  17. 0 15
      AsyncRx.NET/System.Reactive.Async.Subjects/System.Reactive.Async.Subjects.csproj
  18. 0 0
      AsyncRx.NET/System.Reactive.Async/AsyncObservable.cs
  19. 2 2
      AsyncRx.NET/System.Reactive.Async/AsyncObservableBase.cs
  20. 0 0
      AsyncRx.NET/System.Reactive.Async/AsyncObservableExtensions.cs
  21. 0 0
      AsyncRx.NET/System.Reactive.Async/AsyncObserver.cs
  22. 0 0
      AsyncRx.NET/System.Reactive.Async/AsyncObserverBase.cs
  23. 1 1
      AsyncRx.NET/System.Reactive.Async/Concurrency/AsyncScheduler.cs
  24. 1 1
      AsyncRx.NET/System.Reactive.Async/Concurrency/AsyncSchedulerBase.cs
  25. 0 0
      AsyncRx.NET/System.Reactive.Async/Concurrency/Clock.cs
  26. 0 0
      AsyncRx.NET/System.Reactive.Async/Concurrency/IAsyncScheduler.cs
  27. 0 0
      AsyncRx.NET/System.Reactive.Async/Concurrency/IClock.cs
  28. 1 1
      AsyncRx.NET/System.Reactive.Async/Concurrency/ImmediateAsyncScheduler.cs
  29. 1 1
      AsyncRx.NET/System.Reactive.Async/Concurrency/SynchronizationContextAsyncScheduler.cs
  30. 1 1
      AsyncRx.NET/System.Reactive.Async/Concurrency/TaskPoolAsyncScheduler.cs
  31. 0 0
      AsyncRx.NET/System.Reactive.Async/Disposables/AsyncDisposable.cs
  32. 0 0
      AsyncRx.NET/System.Reactive.Async/Disposables/CancellationAsyncDisposable.cs
  33. 1 1
      AsyncRx.NET/System.Reactive.Async/Disposables/CompositeAsyncDisposable.cs
  34. 1 1
      AsyncRx.NET/System.Reactive.Async/Disposables/RefCountAsyncDisposable.cs
  35. 1 1
      AsyncRx.NET/System.Reactive.Async/Disposables/SerialAsyncDisposable.cs
  36. 0 0
      AsyncRx.NET/System.Reactive.Async/Disposables/SingleAssignmentAsyncDisposable.cs
  37. 0 0
      AsyncRx.NET/System.Reactive.Async/Disposables/StableCompositeAsyncDisposable.cs
  38. 0 0
      AsyncRx.NET/System.Reactive.Async/IAsyncObservable.cs
  39. 0 0
      AsyncRx.NET/System.Reactive.Async/IAsyncObserver.cs
  40. 1 1
      AsyncRx.NET/System.Reactive.Async/Internal/AsyncQueueLockAsyncObserver.cs
  41. 1 1
      AsyncRx.NET/System.Reactive.Async/Internal/EventPatternSource.cs
  42. 8 6
      AsyncRx.NET/System.Reactive.Async/Internal/EventPatternSourceBaseInternal.cs
  43. 1 4
      AsyncRx.NET/System.Reactive.Async/Internal/EventSource.cs
  44. 3 3
      AsyncRx.NET/System.Reactive.Async/Internal/FastImmediateAsyncObserver.cs
  45. 0 0
      AsyncRx.NET/System.Reactive.Async/Internal/ISchedulerAsyncObserver.cs
  46. 12 12
      AsyncRx.NET/System.Reactive.Async/Internal/Lookup.cs
  47. 3 3
      AsyncRx.NET/System.Reactive.Async/Internal/ScheduledAsyncObserver.cs
  48. 2 2
      AsyncRx.NET/System.Reactive.Async/Internal/ScheduledAsyncObserverBase.cs
  49. 3 10
      AsyncRx.NET/System.Reactive.Async/Internal/UnsafeAsyncObserver.cs
  50. 0 0
      AsyncRx.NET/System.Reactive.Async/Joins/ActiveAsyncPlan.Generated.cs
  51. 0 0
      AsyncRx.NET/System.Reactive.Async/Joins/ActiveAsyncPlan.Generated.tt
  52. 3 3
      AsyncRx.NET/System.Reactive.Async/Joins/ActiveAsyncPlan.cs
  53. 4 4
      AsyncRx.NET/System.Reactive.Async/Joins/AsyncJoinObserver.cs
  54. 0 0
      AsyncRx.NET/System.Reactive.Async/Joins/AsyncPattern.Generated.cs
  55. 0 0
      AsyncRx.NET/System.Reactive.Async/Joins/AsyncPattern.Generated.tt
  56. 0 0
      AsyncRx.NET/System.Reactive.Async/Joins/AsyncPattern.cs
  57. 0 0
      AsyncRx.NET/System.Reactive.Async/Joins/AsyncPlan.Generated.cs
  58. 0 0
      AsyncRx.NET/System.Reactive.Async/Joins/AsyncPlan.Generated.tt
  59. 0 0
      AsyncRx.NET/System.Reactive.Async/Joins/AsyncPlan.cs
  60. 1 1
      AsyncRx.NET/System.Reactive.Async/Joins/IAsyncJoinObserver.cs
  61. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/AsyncObservable.cs
  62. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/AsyncObserver.cs
  63. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/GroupedAsyncObservable.cs
  64. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/IGroupedAsyncObservable.cs
  65. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Aggregate.cs
  66. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/All.cs
  67. 2 2
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Amb.cs
  68. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/And.cs
  69. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Any.cs
  70. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Append.cs
  71. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/AsAsyncObservable.cs
  72. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Average.Generated.cs
  73. 2 2
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Average.Generated.tt
  74. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Average.cs
  75. 5 5
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Buffer.cs
  76. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Case.cs
  77. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Cast.cs
  78. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Catch.cs
  79. 28 28
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/CombineLatest.Generated.cs
  80. 2 2
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/CombineLatest.Generated.tt
  81. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Concat.cs
  82. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Contains.cs
  83. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Count.cs
  84. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/DefaultIfEmpty.cs
  85. 1 1
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Defer.cs
  86. 1 1
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Delay.cs
  87. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/DelaySubscription.cs
  88. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Dematerialize.cs
  89. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Distinct.cs
  90. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/DistinctUntilChanged.cs
  91. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Do.cs
  92. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/DoWhile.cs
  93. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/ElementAt.cs
  94. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/ElementAtOrDefault.cs
  95. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Empty.cs
  96. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/Finally.cs
  97. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/First.cs
  98. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/FirstOrDefault.cs
  99. 0 0
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/For.cs
  100. 2 2
      AsyncRx.NET/System.Reactive.Async/Linq/Operators/ForEachAsync.cs

+ 6 - 2
.editorconfig

@@ -64,7 +64,7 @@ dotnet_style_predefined_type_for_member_access = true:suggestion
 dotnet_style_readonly_field = true:warning
 
 # Suggest more modern language features when available
-dotnet_style_object_initializer = true:suggestion
+dotnet_style_object_initializer = true:silent
 dotnet_style_collection_initializer = true:suggestion
 dotnet_style_coalesce_expression = true:suggestion
 dotnet_style_null_propagation = true:suggestion
@@ -74,7 +74,7 @@ dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
 dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
 dotnet_style_prefer_conditional_expression_over_return = false
 dotnet_style_prefer_conditional_expression_over_assignment = false
-dotnet_style_prefer_auto_properties = true:suggestion
+dotnet_style_prefer_auto_properties = true:silent
 
 # Parentheses
 dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
@@ -252,3 +252,7 @@ csharp_space_between_method_declaration_name_and_open_parenthesis = false
 csharp_space_between_method_declaration_parameter_list_parentheses = false
 csharp_space_between_parentheses = false
 csharp_space_between_square_brackets = false
+
+# Primary constructors
+# We find these something of a mixed bag.
+dotnet_diagnostic.IDE0290.severity = none

+ 2 - 2
.github/PULL_REQUEST_TEMPLATE.md

@@ -1,12 +1,12 @@
 Hello and thank you for contributing to dotnet/reactive. Before you proceed by creating a pull request (PR):
 
-> Please make sure your contribution is in line with the project's [licensing model](https://github.com/dotnet/reactive/blob/master/LICENSE) and
+> Please make sure your contribution is in line with the project's [licensing model](https://github.com/dotnet/reactive/blob/main/LICENSE) and
 your employment allows you to contribute to open source.
 
 > Please sign the [Contributor License Agreement](https://cla.dotnetfoundation.org/dotnet/reactive?pullRequest=1101) in case the CLA bot asks you
 for being a new contributor.
 
-> Please make sure you target the `master` branch when creating the PR.
+> Please make sure you target the `main` branch when creating the PR.
 
 What is the nature of your contribution?
 

+ 12 - 0
.gitignore

@@ -189,3 +189,15 @@ nuget.exe
 
 # JetBrains Rider adds these
 .idea/
+
+# Local NCrunch settings
+*.v3.ncrunchproject
+*.v3.ncrunchsolution
+/Rx.NET/Source/.NCrunch_*/StoredText
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx

+ 5 - 1
AUTHORS.txt

@@ -14,7 +14,11 @@ Arthur Watson
 Gert Drapers
 Mark Shields
 Eric Rozell
-Oren Novotny
+Claire Novotny
+Geoffrey Huntley
+David Karnok
+Daniel C. Weber
+
 
 Rx.js and Ix.js:
 Matthew Podwysocki

+ 4 - 4
AsyncRx.NET/ApiCompare/ApiCompare.csproj

@@ -3,11 +3,11 @@
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <TargetFramework>netcoreapp3.1</TargetFramework>
-  </PropertyGroup>
 
-  <ItemGroup>
-    <PackageReference Include="System.Reactive" Version="5.0.0" />
-  </ItemGroup>
+    <!-- You wouldn't think we'd need this with an Exe, but it seems this is getting published as a package without this! -->
+    <IsPackable>false</IsPackable>
+    <TargetFramework>net6.0</TargetFramework>
+  </PropertyGroup>
 
   <ItemGroup>
     <ProjectReference Include="..\System.Reactive.Async\System.Reactive.Async.csproj" />

+ 2 - 2
AsyncRx.NET/ApiCompare/Program.cs

@@ -9,9 +9,9 @@ using System.Reflection;
 
 namespace ApiCompare
 {
-    class Program
+    internal class Program
     {
-        static void Main()
+        private static void Main()
         {
             var observable = typeof(Observable).GetMethods(BindingFlags.Public | BindingFlags.Static).Select(m => m.Name).Distinct();
             var asyncObservable = typeof(AsyncObservable).GetMethods(BindingFlags.Public | BindingFlags.Static).Select(m => m.Name).Distinct();

+ 2 - 122
AsyncRx.NET/AsyncRx.NET.sln

@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26730.3
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.33424.131
 MinimumVisualStudioVersion = 15.0.26124.0
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{1D64A210-F73A-4F91-9598-4C51865D105D}"
 EndProject
@@ -13,22 +13,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Playground", "Playground\Pl
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiCompare", "ApiCompare\ApiCompare.csproj", "{84F35A01-ECC4-4635-B702-77F6B18FD54C}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reactive.Shared", "System.Reactive.Shared\System.Reactive.Shared.csproj", "{09F10630-405B-4270-9AB6-0AB8F2EE6621}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reactive.Async.Concurrency", "System.Reactive.Async.Concurrency\System.Reactive.Async.Concurrency.csproj", "{2794CB27-C6A2-4156-A919-C033A9EE474E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reactive.Async.Disposables", "System.Reactive.Async.Disposables\System.Reactive.Async.Disposables.csproj", "{CE5036FE-9B94-40CC-8084-26ACE74D806A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reactive.Async.Interfaces", "System.Reactive.Async.Interfaces\System.Reactive.Async.Interfaces.csproj", "{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reactive.Async.Subjects", "System.Reactive.Async.Subjects\System.Reactive.Async.Subjects.csproj", "{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reactive.Async.Linq", "System.Reactive.Async.Linq\System.Reactive.Async.Linq.csproj", "{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reactive.Bcl", "System.Reactive.Bcl\System.Reactive.Bcl.csproj", "{B709ED34-B782-4617-AE83-C0170A2EEE19}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reactive.Async.Core", "System.Reactive.Async.Core\System.Reactive.Async.Core.csproj", "{9D2E636E-1C4D-4130-908D-4174B6D7AC71}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -75,102 +59,6 @@ Global
 		{84F35A01-ECC4-4635-B702-77F6B18FD54C}.Release|x64.Build.0 = Release|Any CPU
 		{84F35A01-ECC4-4635-B702-77F6B18FD54C}.Release|x86.ActiveCfg = Release|Any CPU
 		{84F35A01-ECC4-4635-B702-77F6B18FD54C}.Release|x86.Build.0 = Release|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Debug|x64.Build.0 = Debug|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Debug|x86.Build.0 = Debug|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Release|Any CPU.Build.0 = Release|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Release|x64.ActiveCfg = Release|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Release|x64.Build.0 = Release|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Release|x86.ActiveCfg = Release|Any CPU
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621}.Release|x86.Build.0 = Release|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Debug|x64.Build.0 = Debug|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Debug|x86.Build.0 = Debug|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Release|x64.ActiveCfg = Release|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Release|x64.Build.0 = Release|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Release|x86.ActiveCfg = Release|Any CPU
-		{2794CB27-C6A2-4156-A919-C033A9EE474E}.Release|x86.Build.0 = Release|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Debug|x64.Build.0 = Debug|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Debug|x86.Build.0 = Debug|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Release|x64.ActiveCfg = Release|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Release|x64.Build.0 = Release|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Release|x86.ActiveCfg = Release|Any CPU
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A}.Release|x86.Build.0 = Release|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Debug|x64.Build.0 = Debug|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Debug|x86.Build.0 = Debug|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Release|Any CPU.Build.0 = Release|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Release|x64.ActiveCfg = Release|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Release|x64.Build.0 = Release|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Release|x86.ActiveCfg = Release|Any CPU
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE}.Release|x86.Build.0 = Release|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Debug|x64.Build.0 = Debug|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Debug|x86.Build.0 = Debug|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Release|x64.ActiveCfg = Release|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Release|x64.Build.0 = Release|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Release|x86.ActiveCfg = Release|Any CPU
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0}.Release|x86.Build.0 = Release|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Debug|x64.Build.0 = Debug|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Debug|x86.Build.0 = Debug|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Release|x64.ActiveCfg = Release|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Release|x64.Build.0 = Release|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Release|x86.ActiveCfg = Release|Any CPU
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D}.Release|x86.Build.0 = Release|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Debug|x64.Build.0 = Debug|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Debug|x86.Build.0 = Debug|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Release|Any CPU.Build.0 = Release|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Release|x64.ActiveCfg = Release|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Release|x64.Build.0 = Release|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Release|x86.ActiveCfg = Release|Any CPU
-		{B709ED34-B782-4617-AE83-C0170A2EEE19}.Release|x86.Build.0 = Release|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Debug|x64.Build.0 = Debug|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Debug|x86.Build.0 = Debug|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Release|Any CPU.Build.0 = Release|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Release|x64.ActiveCfg = Release|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Release|x64.Build.0 = Release|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Release|x86.ActiveCfg = Release|Any CPU
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -179,14 +67,6 @@ Global
 		{AEDF2B02-F301-4AC6-9DBC-2744746D816A} = {1D64A210-F73A-4F91-9598-4C51865D105D}
 		{3B83795B-9870-43FA-82AF-95A44CF0194F} = {7D5B343C-B34D-481C-8774-B6BB14BC1B22}
 		{84F35A01-ECC4-4635-B702-77F6B18FD54C} = {7D5B343C-B34D-481C-8774-B6BB14BC1B22}
-		{09F10630-405B-4270-9AB6-0AB8F2EE6621} = {1D64A210-F73A-4F91-9598-4C51865D105D}
-		{2794CB27-C6A2-4156-A919-C033A9EE474E} = {1D64A210-F73A-4F91-9598-4C51865D105D}
-		{CE5036FE-9B94-40CC-8084-26ACE74D806A} = {1D64A210-F73A-4F91-9598-4C51865D105D}
-		{B66081C4-2DE2-451C-AE3B-6D2A8B9BE0EE} = {1D64A210-F73A-4F91-9598-4C51865D105D}
-		{31A2470C-29B0-45BD-A9E8-340E7BDA15B0} = {1D64A210-F73A-4F91-9598-4C51865D105D}
-		{D3A5AA1A-1E6F-43FD-B827-3015429D6E6D} = {1D64A210-F73A-4F91-9598-4C51865D105D}
-		{B709ED34-B782-4617-AE83-C0170A2EEE19} = {1D64A210-F73A-4F91-9598-4C51865D105D}
-		{9D2E636E-1C4D-4130-908D-4174B6D7AC71} = {1D64A210-F73A-4F91-9598-4C51865D105D}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {836C3B9A-682A-4E6F-8053-92BFC9D29D89}

+ 1 - 2
AsyncRx.NET/Directory.build.props

@@ -14,7 +14,6 @@
     <DefaultLanguage>en-US</DefaultLanguage>
     <IncludeSymbols>false</IncludeSymbols>
     <IsTestProject>$(MSBuildProjectName.Contains('Tests'))</IsTestProject>
-    <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)Rx.ruleset</CodeAnalysisRuleSet>
     <GeneratePackageOnBuild Condition=" '$(IsTestProject)' != 'true' and '$(CreatePackage)' == 'true' ">true</GeneratePackageOnBuild>
     <PackageOutputPath>$(MSBuildThisFileDirectory)artifacts</PackageOutputPath>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
@@ -32,7 +31,7 @@
   </ItemGroup>
 
   <ItemGroup Condition="'$(IsTestProject)' == 'true'">
-    <PackageReference Include="coverlet.collector" Version="3.1.0" />
+    <PackageReference Include="coverlet.collector" Version="3.2.0" />
   </ItemGroup>
 
 </Project>

+ 64 - 0
AsyncRx.NET/Documentation/adr/0001-package-unification.md

@@ -0,0 +1,64 @@
+# AsyncRx.NET NuGet Package Unification
+
+When the AsyncRx.NET was added to the dotnet/reactive repository back in 2017, it reflected the Rx v3 packaging approach in which all the various elements were split out. This ADR describes the change to a smaller number of packages.
+
+## Status
+
+Proposed.
+
+## Context
+
+The original AsyncRx.NET code was split into many packages. Note that none of these was published to NuGet. We had the following:
+
+* `System.Reactive.Async.Concurrency`
+* `System.Reactive.Async.Core`
+* `System.Reactive.Async.Disposables`
+* `System.Reactive.Async.Interfaces`
+* `System.Reactive.Async.Linq`
+* `System.Reactive.Async.Subjects`
+* `System.Reactive.Async`
+
+There were also two more projects that didn't contain anything specific to asynchronous Rx:
+
+* `System.Reactive.Bcl`
+* `System.Reactive.Shared`
+
+The last of these, `System.Reactive.Shared`, contains the following types:
+
+* `EventPattern`
+* `IEventPattern`
+* `IEventPatternSource`
+* `IEventSource`
+* `Notification`
+* `TimeInterval`
+* `TimeStamped`
+* `Unit`
+
+Definitions for all of these types already exist in the `System.Reactive` component published to NuGet.
+
+The `System.Reactive.Bcl` project contains two types providing asynchronous locking features. They appear to have been labelled `Bcl` because they are entirely non-Rx-specific, and are the sort of thing that might reasonably ultimately migrate into the BCL (and historically, a few things from Rx have done that). They are defined in the `System.Threading` namespace.
+
+It's useful to understand the history of `System.Reactive.Async.Interfaces` in particular. This is the asynchronous counterpart of `System.Reactive.Interfaces`. Back in the days of Rx v2.0, that interfaces library was conceived of as the home for types that were expected not to evolve. The plan was that this library would remain unchanged as the rest of Rx expanded and evolved. This way, APIs could expose Rx interface types in a way that did not cause a dependency on some specific version of the Rx implementation types. But it didn't go to plan. New versions of the `System.Reactive.Async.Interfaces` got published with new Rx releases. And then in Rx 4.0, the 'great unification' occurred, and the relevant types moved into `System.Reactive` with `System.Reactive.Interfaces` becoming a backwards-compatibility façade containing nothing but type forwarders.
+
+There's one important difference between Rx.NET and AsyncRx.NET when it comes to core interfaces. With Rx.NET, the two most critical interfaces, `IObservable<T>` and `IObserver<T>`, were added to the .NET runtime libraries. This means that any component can exposed Rx-based surface area without taking a dependency on any Rx library at all. The same is **not** true for AsyncRx.NET.
+
+The two most critical interfaces in AsyncRx.NET, `IAsyncObservable<T>` and `IAsyncObserver<T>` have not been defined in the .NET runtime libraries. There is arguably a need—for example, Project Orleans has defined (Orleans.Streams.IAsyncObservable<T>)[https://learn.microsoft.com/en-us/dotnet/api/orleans.streams.iasyncobservable-1?view=orleans-7.0]. However, its definitions include Orleans-specific dependencies, so while the existence of that interface is evidence of a general-purpose requirement for this kind of thing, AsyncRx.NET cannot use that actual definition.
+
+Moreover, there are some unresolved questions over how cancellation fits into the picture discussed at https://github.com/dotnet/reactive/issues/1296 which suggests that AsyncRx.NET's existing definitions of these interfaces might not yet be fully baked.
+
+## Decision
+
+There will be a single `System.Reactive.Async` component. In most cases, we will simply move code out of the other projects and into this one without modification. However, some of the projects require special consideration.
+
+The `System.Reactive.Async.Interfaces` will be removed because it's not clear that even the two most critical interfaces, `IAsyncObservable<T>` and `IAsyncObserver<T>`, are fully baked, so it would be misleading to imply that these interfaces represent some stable type that can be relied on over a longer time frame than any particular AsyncRx.NET implementation release. (And in any case, that idea didn't quite pan out as planned for Rx.NET.) Moreover, merging these interface types into `System.Reactive.Async` is entirely consistent with the unification that was done with Rx.NET in v4.0. (And this does not introduce any of the problems we now see from that unification have gone too far, because there are no UI-framework-specific concerns in AsyncRx.NET.)
+
+The `System.Reactive.Shared` component will be removed, and AsyncRx.NET will instead take a dependency on `System.Reactive`, so that it can use the definitions of these types from that library. The long-term intention is that AsyncRx.NET will depend on the (to-be-created) version of Rx.NET that fixes the problems around unwanted accidental dependencies on UI framework, currently planned to be Rx 7.0. To signal this 'future-oriented' nature of AsyncRx.NET, initial previews will not depend on the currently published Rx 5.0, but will depend on the latest available preview until such time as a non-preview Rx 7.0 ships.
+
+The `System.Reactive.Bcl` component will be removed. The types it contains will move into `System.Reactive.Async`. We will move them out of the `System.Threading` namespace because at this point we have no plan for getting them into the .NET runtime libraries. We will check to see whether the runtime libraries do now in fact have similar functionality, in which case we will use that instead, and delete these types. But if there are no direct equivalents, we will move these into a suitable namespace and make them `internal` since they are implementation details, and it is not our intention for AsyncRx.NET to be providing general-purpose asynchronous programming utilities.
+
+## Consequences
+
+Consumers of AsyncRx.NET will see just a single NuGet package, `System.Reactive.Async`, removing any uncertainty over which is the right package to use.
+
+By removing `System.Reactive.Shared`, we avoid duplicate definitions of all the types it contains. The downside is that a dependency on AsyncRx.NET now necessarily means a dependency on Rx.NET, which wasn't previously the case. (Our view is that most projects wanting AsyncRx.NET will probably want Rx.NET too, so we don't regard this as a serious downside.)
+

+ 4 - 0
AsyncRx.NET/Playground/Playground.csproj

@@ -3,6 +3,10 @@
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <TargetFramework>netcoreapp3.1</TargetFramework>
+
+    <!-- You wouldn't think we'd need this with an Exe, but it seems this is getting published as a package without this! -->
+    <IsPackable>false</IsPackable>
+    <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

+ 33 - 33
AsyncRx.NET/Playground/Program.cs

@@ -2,6 +2,11 @@
 // The .NET Foundation licenses this file to you under the MIT License.
 // See the LICENSE file in the project root for more information. 
 
+// The intention is that people will uncomment whichever method call in Main they want to try.
+// The following suppressions prevent warnings due to 'unused' members, and the fact that all of
+// the await statements in Main are commented out to start with
+#pragma warning disable IDE0051, CS1998
+
 using System;
 using System.Linq;
 using System.Reactive;
@@ -12,16 +17,9 @@ using System.Threading.Tasks;
 
 namespace Playground
 {
-    static class Program
+    internal static class Program
     {
-        static void Main()
-        {
-            MainAsync().GetAwaiter().GetResult();
-
-            Console.ReadLine();
-        }
-
-        static async Task MainAsync()
+        private static async Task Main()
         {
             //await AggregateAsync();
             //await AllAsync();
@@ -45,34 +43,36 @@ namespace Playground
             //await TakeUntilAsync();
             //await TimerAsync();
             //await WhileAsync();
+
+            Console.ReadLine();
         }
 
-        static async Task AggregateAsync()
+        private static async Task AggregateAsync()
         {
             await AsyncObservable.Range(0, 10).Aggregate(0, (sum, x) => sum + x).SubscribeAsync(Print<int>());
         }
 
-        static async Task AllAsync()
+        private static async Task AllAsync()
         {
             await AsyncObservable.Range(0, 10).All(x => x < 10).SubscribeAsync(Print<bool>());
         }
 
-        static async Task AnyAsync()
+        private static async Task AnyAsync()
         {
             await AsyncObservable.Range(0, 10).Any(x => x == 5).SubscribeAsync(Print<bool>());
         }
 
-        static async Task AppendAsync()
+        private static async Task AppendAsync()
         {
             await AsyncObservable.Range(0, 10).Append(42).SubscribeAsync(Print<int>());
         }
 
-        static async Task AwaitAsync()
+        private static async Task AwaitAsync()
         {
             Console.WriteLine(await AsyncObservable.Range(0, 10));
         }
 
-        static async Task BufferTimeHoppingAsync()
+        private static async Task BufferTimeHoppingAsync()
         {
             await
                 AsyncObservable
@@ -82,7 +82,7 @@ namespace Playground
                     .SubscribeAsync(Print<string>()); // TODO: Use ForEachAsync.
         }
 
-        static async Task BufferTimeSlidingAsync()
+        private static async Task BufferTimeSlidingAsync()
         {
             await
                 AsyncObservable
@@ -93,7 +93,7 @@ namespace Playground
                     .SubscribeAsync(Print<string>()); // TODO: Use ForEachAsync.
         }
 
-        static async Task CombineLatestAsync()
+        private static async Task CombineLatestAsync()
         {
             await
                 AsyncObservable.CombineLatest(
@@ -104,7 +104,7 @@ namespace Playground
                 .SubscribeAsync(Print<string>()); // TODO: Use ForEachAsync.
         }
 
-        static async Task ConcatAsync()
+        private static async Task ConcatAsync()
         {
             await
                 AsyncObservable.Concat(
@@ -116,7 +116,7 @@ namespace Playground
                 .SubscribeAsync(Print<int>()); // TODO: Use ForEachAsync.
         }
 
-        static async Task DelayAsync()
+        private static async Task DelayAsync()
         {
             await
                 AsyncObservable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1))
@@ -127,7 +127,7 @@ namespace Playground
                     .SubscribeAsync(Print<string>()); // TODO: Use ForEachAsync.
         }
 
-        static async Task GroupByAsync()
+        private static async Task GroupByAsync()
         {
             await
                 AsyncObservable.Interval(TimeSpan.FromMilliseconds(250))
@@ -140,7 +140,7 @@ namespace Playground
                     });
         }
 
-        static async Task GroupBySelectManyAsync()
+        private static async Task GroupBySelectManyAsync()
         {
             await
                 AsyncObservable.Interval(TimeSpan.FromMilliseconds(250))
@@ -151,7 +151,7 @@ namespace Playground
                     .SubscribeAsync(Print<string>());
         }
 
-        static async Task MergeAsync()
+        private static async Task MergeAsync()
         {
             var subject = new SequentialSimpleAsyncSubject<IAsyncObservable<int>>();
 
@@ -167,17 +167,17 @@ namespace Playground
             await subject.OnCompletedAsync();
         }
 
-        static async Task PrependAsync()
+        private static async Task PrependAsync()
         {
             await AsyncObservable.Range(0, 10).Prepend(42).SubscribeAsync(Print<int>());
         }
 
-        static async Task RangeAsync()
+        private static async Task RangeAsync()
         {
             await AsyncObservable.Range(0, 10).SubscribeAsync(PrintAsync<int>()); // TODO: Use ForEachAsync.
         }
 
-        static async Task ReplaySubjectAsync()
+        private static async Task ReplaySubjectAsync()
         {
             var sub = new SequentialReplayAsyncSubject<int>(5);
 
@@ -208,12 +208,12 @@ namespace Playground
             await sub.OnNextAsync(47);
         }
 
-        static async Task ReturnAsync()
+        private static async Task ReturnAsync()
         {
             await AsyncObservable.Return(42).SubscribeAsync(Print<int>());
         }
 
-        static async Task SelectManyAsync()
+        private static async Task SelectManyAsync()
         {
             var res = from i in AsyncObservable.Range(0, 10)
                       from j in AsyncObservable.Range(i * 10, 10)
@@ -222,7 +222,7 @@ namespace Playground
             await res.SubscribeAsync(Print<string>());
         }
 
-        static async Task SubjectAsync()
+        private static async Task SubjectAsync()
         {
             var subject = new SequentialSimpleAsyncSubject<int>();
 
@@ -238,24 +238,24 @@ namespace Playground
             await subject.OnCompletedAsync();
         }
 
-        static async Task TakeUntilAsync()
+        private static async Task TakeUntilAsync()
         {
             await AsyncObservable.Range(0, int.MaxValue).TakeUntil(DateTimeOffset.Now.AddSeconds(5)).SubscribeAsync(Print<int>()); // TODO: Use ForEachAsync.
         }
 
-        static async Task TimerAsync()
+        private static async Task TimerAsync()
         {
             await AsyncObservable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2)).Take(5).Select(_ => DateTimeOffset.Now).SubscribeAsync(Print<DateTimeOffset>()); // TODO: Use ForEachAsync.
         }
 
-        static async Task WhileAsync()
+        private static async Task WhileAsync()
         {
             var i = 0;
 
             await AsyncObservable.While(() => ++i < 5, AsyncObservable.Range(0, 5)).SubscribeAsync(Print<int>()); // TODO: Use ForEachAsync.
         }
 
-        static IAsyncObserver<T> Print<T>()
+        private static IAsyncObserver<T> Print<T>()
         {
             return AsyncObserver.Create<T>(
                 x =>
@@ -276,7 +276,7 @@ namespace Playground
             );
         }
 
-        static IAsyncObserver<T> PrintAsync<T>()
+        private static IAsyncObserver<T> PrintAsync<T>()
         {
             return AsyncObserver.Create<T>(
                 async x =>

+ 0 - 13
AsyncRx.NET/System.Reactive.Async.Concurrency/System.Reactive.Async.Concurrency.csproj

@@ -1,13 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.1</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\System.Reactive.Async.Interfaces\System.Reactive.Async.Interfaces.csproj" />
-    <ProjectReference Include="..\System.Reactive.Bcl\System.Reactive.Bcl.csproj" />
-    <ProjectReference Include="..\System.Reactive.Shared\System.Reactive.Shared.csproj" />
-  </ItemGroup>
-
-</Project>

+ 0 - 13
AsyncRx.NET/System.Reactive.Async.Core/System.Reactive.Async.Core.csproj

@@ -1,13 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.1</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\System.Reactive.Async.Disposables\System.Reactive.Async.Disposables.csproj" />
-    <ProjectReference Include="..\System.Reactive.Async.Interfaces\System.Reactive.Async.Interfaces.csproj" />
-    <ProjectReference Include="..\System.Reactive.Bcl\System.Reactive.Bcl.csproj" />
-  </ItemGroup>
-
-</Project>

+ 0 - 12
AsyncRx.NET/System.Reactive.Async.Disposables/System.Reactive.Async.Disposables.csproj

@@ -1,12 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.1</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\System.Reactive.Async.Interfaces\System.Reactive.Async.Interfaces.csproj" />
-    <ProjectReference Include="..\System.Reactive.Bcl\System.Reactive.Bcl.csproj" />
-  </ItemGroup>
-
-</Project>

+ 0 - 7
AsyncRx.NET/System.Reactive.Async.Interfaces/System.Reactive.Async.Interfaces.csproj

@@ -1,7 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.1</TargetFramework>
-  </PropertyGroup>
-
-</Project>

+ 0 - 143
AsyncRx.NET/System.Reactive.Async.Linq/System.Reactive.Async.Linq.csproj

@@ -1,143 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.1</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <None Include="System\Reactive\Linq\Operators\FromEvent.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>FromEvent.Generated.tt</DependentUpon>
-    </None>
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\System.Reactive.Async.Concurrency\System.Reactive.Async.Concurrency.csproj" />
-    <ProjectReference Include="..\System.Reactive.Async.Core\System.Reactive.Async.Core.csproj" />
-    <ProjectReference Include="..\System.Reactive.Async.Disposables\System.Reactive.Async.Disposables.csproj" />
-    <ProjectReference Include="..\System.Reactive.Async.Interfaces\System.Reactive.Async.Interfaces.csproj" />
-    <ProjectReference Include="..\System.Reactive.Async.Subjects\System.Reactive.Async.Subjects.csproj" />
-    <ProjectReference Include="..\System.Reactive.Bcl\System.Reactive.Bcl.csproj" />
-    <ProjectReference Include="..\System.Reactive.Shared\System.Reactive.Shared.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Compile Update="System\Reactive\Joins\ActiveAsyncPlan.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>ActiveAsyncPlan.Generated.tt</DependentUpon>
-    </Compile>
-    <Compile Update="System\Reactive\Joins\AsyncPattern.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>AsyncPattern.Generated.tt</DependentUpon>
-    </Compile>
-    <Compile Update="System\Reactive\Joins\AsyncPlan.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>AsyncPlan.Generated.tt</DependentUpon>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\Average.Generated.cs">
-      <DependentUpon>Average.Generated.tt</DependentUpon>
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\CombineLatest.Generated.cs">
-      <DependentUpon>CombineLatest.Generated.tt</DependentUpon>
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\FromAsyncPattern.Generated.cs">
-      <DependentUpon>FromAsyncPattern.Generated.tt</DependentUpon>
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\FromEvent.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>FromEvent.Generated.tt</DependentUpon>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\Max.Generated.cs">
-      <DependentUpon>Max.Generated.tt</DependentUpon>
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\Min.Generated.cs">
-      <DependentUpon>Min.Generated.tt</DependentUpon>
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\Sum.Generated.cs">
-      <DependentUpon>Sum.Generated.tt</DependentUpon>
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\ToAsync.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>ToAsync.Generated.tt</DependentUpon>
-    </Compile>
-    <Compile Update="System\Reactive\Linq\Operators\Zip.Generated.cs">
-      <DependentUpon>Zip.Generated.tt</DependentUpon>
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-    </Compile>
-  </ItemGroup>
-
-  <ItemGroup>
-    <None Update="System\Reactive\Joins\ActiveAsyncPlan.Generated.tt">
-      <Generator>TextTemplatingFileGenerator</Generator>
-      <LastGenOutput>ActiveAsyncPlan.Generated.cs</LastGenOutput>
-    </None>
-    <None Update="System\Reactive\Joins\AsyncPattern.Generated.tt">
-      <Generator>TextTemplatingFileGenerator</Generator>
-      <LastGenOutput>AsyncPattern.Generated.cs</LastGenOutput>
-    </None>
-    <None Update="System\Reactive\Joins\AsyncPlan.Generated.tt">
-      <Generator>TextTemplatingFileGenerator</Generator>
-      <LastGenOutput>AsyncPlan.Generated.cs</LastGenOutput>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\Average.Generated.tt">
-      <LastGenOutput>Average.Generated.cs</LastGenOutput>
-      <Generator>TextTemplatingFileGenerator</Generator>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\CombineLatest.Generated.tt">
-      <LastGenOutput>CombineLatest.Generated.cs</LastGenOutput>
-      <Generator>TextTemplatingFileGenerator</Generator>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\FromEvent.Generated.tt">
-      <Generator>TextTemplatingFileGenerator</Generator>
-      <LastGenOutput>FromEvent.Generated.cs</LastGenOutput>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\ToAsync.Generated.tt">
-      <LastGenOutput>ToAsync.Generated.cs</LastGenOutput>
-      <Generator>TextTemplatingFileGenerator</Generator>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\FromAsyncPattern.Generated.tt">
-      <LastGenOutput>FromAsyncPattern.Generated.cs</LastGenOutput>
-      <Generator>TextTemplatingFileGenerator</Generator>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\Max.Generated.tt">
-      <LastGenOutput>Max.Generated.cs</LastGenOutput>
-      <Generator>TextTemplatingFileGenerator</Generator>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\Min.Generated.tt">
-      <LastGenOutput>Min.Generated.cs</LastGenOutput>
-      <Generator>TextTemplatingFileGenerator</Generator>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\Sum.Generated.tt">
-      <LastGenOutput>Sum.Generated.cs</LastGenOutput>
-      <Generator>TextTemplatingFileGenerator</Generator>
-    </None>
-    <None Update="System\Reactive\Linq\Operators\Zip.Generated.tt">
-      <LastGenOutput>Zip.Generated.cs</LastGenOutput>
-      <Generator>TextTemplatingFileGenerator</Generator>
-    </None>
-  </ItemGroup>
-
-  <ItemGroup>
-    <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
-  </ItemGroup>
-
-</Project>

+ 0 - 15
AsyncRx.NET/System.Reactive.Async.Subjects/System.Reactive.Async.Subjects.csproj

@@ -1,15 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netstandard2.1</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\System.Reactive.Async.Concurrency\System.Reactive.Async.Concurrency.csproj" />
-    <ProjectReference Include="..\System.Reactive.Async.Core\System.Reactive.Async.Core.csproj" />
-    <ProjectReference Include="..\System.Reactive.Async.Disposables\System.Reactive.Async.Disposables.csproj" />
-    <ProjectReference Include="..\System.Reactive.Async.Interfaces\System.Reactive.Async.Interfaces.csproj" />
-    <ProjectReference Include="..\System.Reactive.Bcl\System.Reactive.Bcl.csproj" />
-  </ItemGroup>
-
-</Project>

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Core/System/Reactive/AsyncObservable.cs → AsyncRx.NET/System.Reactive.Async/AsyncObservable.cs


+ 2 - 2
AsyncRx.NET/System.Reactive.Async.Core/System/Reactive/AsyncObservableBase.cs → AsyncRx.NET/System.Reactive.Async/AsyncObservableBase.cs

@@ -27,7 +27,7 @@ namespace System.Reactive
         private sealed class AutoDetachAsyncObserver : AsyncObserverBase<T>, IAsyncDisposable
         {
             private readonly IAsyncObserver<T> _observer;
-            private readonly object _gate = new object();
+            private readonly object _gate = new();
 
             private IAsyncDisposable _subscription;
             private ValueTask _task;
@@ -62,7 +62,7 @@ namespace System.Reactive
 
             public async ValueTask DisposeAsync()
             {
-                var task = default(ValueTask);
+                ValueTask task;
                 var subscription = default(IAsyncDisposable);
 
                 lock (_gate)

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Core/System/AsyncObservableExtensions.cs → AsyncRx.NET/System.Reactive.Async/AsyncObservableExtensions.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Core/System/Reactive/AsyncObserver.cs → AsyncRx.NET/System.Reactive.Async/AsyncObserver.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Core/System/Reactive/AsyncObserverBase.cs → AsyncRx.NET/System.Reactive.Async/AsyncObserverBase.cs


+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/AsyncScheduler.cs → AsyncRx.NET/System.Reactive.Async/Concurrency/AsyncScheduler.cs

@@ -208,7 +208,7 @@ namespace System.Reactive.Concurrency
                 _token = token;
             }
 
-            public RendezVousAwaiter GetAwaiter() => new RendezVousAwaiter(_scheduler, _token);
+            public RendezVousAwaiter GetAwaiter() => new(_scheduler, _token);
 
             public sealed class RendezVousAwaiter : INotifyCompletion
             {

+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/AsyncSchedulerBase.cs → AsyncRx.NET/System.Reactive.Async/Concurrency/AsyncSchedulerBase.cs

@@ -66,7 +66,7 @@ namespace System.Reactive.Concurrency
 
         private sealed class CancellationAsyncDisposable : IAsyncDisposable
         {
-            private readonly CancellationTokenSource _cts = new CancellationTokenSource();
+            private readonly CancellationTokenSource _cts = new();
 
             public CancellationToken Token => _cts.Token;
 

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/Clock.cs → AsyncRx.NET/System.Reactive.Async/Concurrency/Clock.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Interfaces/System/Reactive/Concurrency/IAsyncScheduler.cs → AsyncRx.NET/System.Reactive.Async/Concurrency/IAsyncScheduler.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Interfaces/System/Reactive/Concurrency/IClock.cs → AsyncRx.NET/System.Reactive.Async/Concurrency/IClock.cs


+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/ImmediateAsyncScheduler.cs → AsyncRx.NET/System.Reactive.Async/Concurrency/ImmediateAsyncScheduler.cs

@@ -13,7 +13,7 @@ namespace System.Reactive.Concurrency
 
         private ImmediateAsyncScheduler() { }
 
-        protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new ValueTask(Task.Delay(dueTime));
+        protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new(Task.Delay(dueTime));
 
         protected override ValueTask ScheduleAsyncCore(Func<CancellationToken, ValueTask> action, CancellationToken token) => action(token);
     }

+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/SynchronizationContextAsyncScheduler.cs → AsyncRx.NET/System.Reactive.Async/Concurrency/SynchronizationContextAsyncScheduler.cs

@@ -16,7 +16,7 @@ namespace System.Reactive.Concurrency
             _context = context ?? throw new ArgumentNullException(nameof(context));
         }
 
-        protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new ValueTask(Task.Delay(dueTime, token));
+        protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new(Task.Delay(dueTime, token));
 
         protected override ValueTask ScheduleAsyncCore(Func<CancellationToken, ValueTask> action, CancellationToken token)
         {

+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Concurrency/System/Reactive/Concurrency/TaskPoolAsyncScheduler.cs → AsyncRx.NET/System.Reactive.Async/Concurrency/TaskPoolAsyncScheduler.cs

@@ -27,7 +27,7 @@ namespace System.Reactive.Concurrency
             _factory = factory ?? throw new ArgumentNullException(nameof(factory));
         }
 
-        protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new ValueTask(Task.Delay(dueTime, token));
+        protected override ValueTask Delay(TimeSpan dueTime, CancellationToken token) => new(Task.Delay(dueTime, token));
 
         protected override ValueTask ScheduleAsyncCore(Func<CancellationToken, ValueTask> action, CancellationToken token)
         {

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Disposables/System/Reactive/Disposables/AsyncDisposable.cs → AsyncRx.NET/System.Reactive.Async/Disposables/AsyncDisposable.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Disposables/System/Reactive/Disposables/CancellationAsyncDisposable.cs → AsyncRx.NET/System.Reactive.Async/Disposables/CancellationAsyncDisposable.cs


+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Disposables/System/Reactive/Disposables/CompositeAsyncDisposable.cs → AsyncRx.NET/System.Reactive.Async/Disposables/CompositeAsyncDisposable.cs

@@ -11,7 +11,7 @@ namespace System.Reactive.Disposables
 {
     public sealed class CompositeAsyncDisposable : IAsyncDisposable
     {
-        private readonly AsyncLock _gate = new AsyncLock();
+        private readonly AsyncGate _gate = new();
         private readonly List<IAsyncDisposable> _disposables;
         private bool _disposed;
 

+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Disposables/System/Reactive/Disposables/RefCountAsyncDisposable.cs → AsyncRx.NET/System.Reactive.Async/Disposables/RefCountAsyncDisposable.cs

@@ -9,7 +9,7 @@ namespace System.Reactive.Disposables
 {
     public sealed class RefCountAsyncDisposable : IAsyncDisposable
     {
-        private readonly AsyncLock _gate = new AsyncLock();
+        private readonly AsyncGate _gate = new();
         private IAsyncDisposable _disposable;
         private bool _primaryDisposed;
         private int _count;

+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Disposables/System/Reactive/Disposables/SerialAsyncDisposable.cs → AsyncRx.NET/System.Reactive.Async/Disposables/SerialAsyncDisposable.cs

@@ -9,7 +9,7 @@ namespace System.Reactive.Disposables
 {
     public sealed class SerialAsyncDisposable : IAsyncDisposable
     {
-        private readonly AsyncLock _gate = new AsyncLock();
+        private readonly AsyncGate _gate = new();
 
         private IAsyncDisposable _disposable;
         private bool _disposed;

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Disposables/System/Reactive/Disposables/SingleAssignmentAsyncDisposable.cs → AsyncRx.NET/System.Reactive.Async/Disposables/SingleAssignmentAsyncDisposable.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Disposables/System/Reactive/Disposables/StableCompositeAsyncDisposable.cs → AsyncRx.NET/System.Reactive.Async/Disposables/StableCompositeAsyncDisposable.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Interfaces/System/IAsyncObservable.cs → AsyncRx.NET/System.Reactive.Async/IAsyncObservable.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Interfaces/System/IAsyncObserver.cs → AsyncRx.NET/System.Reactive.Async/IAsyncObserver.cs


+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/AsyncQueueLockAsyncObserver.cs → AsyncRx.NET/System.Reactive.Async/Internal/AsyncQueueLockAsyncObserver.cs

@@ -9,7 +9,7 @@ namespace System.Reactive
 {
     internal sealed class AsyncQueueLockAsyncObserver<T> : AsyncObserverBase<T>
     {
-        private readonly AsyncQueueLock _gate = new AsyncQueueLock();
+        private readonly AsyncQueueLock _gate = new();
         private readonly IAsyncObserver<T> _observer;
 
         public AsyncQueueLockAsyncObserver(IAsyncObserver<T> observer)

+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Internal/EventPatternSource.cs → AsyncRx.NET/System.Reactive.Async/Internal/EventPatternSource.cs

@@ -4,7 +4,7 @@
 
 namespace System.Reactive
 {
-    internal sealed class EventPatternSource<TEventArgs> : EventPatternSourceBase<object, TEventArgs>, IEventPatternSource<TEventArgs>
+    internal sealed class EventPatternSource<TEventArgs> : EventPatternSourceBaseInternal<object, TEventArgs>, IEventPatternSource<TEventArgs>
     {
         public EventPatternSource(IAsyncObservable<EventPattern<object, TEventArgs>> source, Action<Action<object, TEventArgs>, /*object,*/ EventPattern<object, TEventArgs>> invokeHandler)
             : base(source, invokeHandler)

+ 8 - 6
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Internal/EventPatternSourceBase.cs → AsyncRx.NET/System.Reactive.Async/Internal/EventPatternSourceBaseInternal.cs

@@ -14,7 +14,12 @@ namespace System.Reactive
     /// </summary>
     /// <typeparam name="TSender">The type of the sender that raises the event.</typeparam>
     /// <typeparam name="TEventArgs">The type of the event data generated by the event.</typeparam>
-    internal abstract class EventPatternSourceBase<TSender, TEventArgs>
+    /// <remarks>
+    /// TODO: System.Reactive defines an EventPatternSourceBase. I (idg10) renamed this to EventPatternSourceBaseInternal to
+    /// avoid a conflict. Work out whether we could in fact just use the type defined in System.Reactive. It's not identical,
+    /// but perhaps it offers what we need.
+    /// </remarks>
+    internal abstract class EventPatternSourceBaseInternal<TSender, TEventArgs>
     {
         private readonly IAsyncObservable<EventPattern<TSender, TEventArgs>> _source;
         private readonly Dictionary<Delegate, Stack<IAsyncDisposable>> _subscriptions;
@@ -26,7 +31,7 @@ namespace System.Reactive
         /// <param name="source">Source sequence to expose as an event.</param>
         /// <param name="invokeHandler">Delegate used to invoke the event for each element of the sequence.</param>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="invokeHandler"/> is null.</exception>
-        protected EventPatternSourceBase(IAsyncObservable<EventPattern<TSender, TEventArgs>> source, Action<Action<TSender, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> invokeHandler)
+        protected EventPatternSourceBaseInternal(IAsyncObservable<EventPattern<TSender, TEventArgs>> source, Action<Action<TSender, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> invokeHandler)
         {
             _source = source ?? throw new ArgumentNullException(nameof(source));
             _invokeHandler = invokeHandler ?? throw new ArgumentNullException(nameof(invokeHandler));
@@ -115,10 +120,7 @@ namespace System.Reactive
                 }
             }
 
-            if (d != null)
-            {
-                d.DisposeAsync().GetAwaiter().GetResult();
-            }
+            d?.DisposeAsync().GetAwaiter().GetResult();
         }
     }
 }

+ 1 - 4
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Internal/EventSource.cs → AsyncRx.NET/System.Reactive.Async/Internal/EventSource.cs

@@ -91,10 +91,7 @@ namespace System.Reactive
                 }
             }
 
-            if (d != null)
-            {
-                d.DisposeAsync().GetAwaiter().GetResult();
-            }
+            d?.DisposeAsync().GetAwaiter().GetResult();
         }
     }
 }

+ 3 - 3
AsyncRx.NET/System.Reactive.Async.Subjects/System/Reactive/FastImmediateAsyncObserver.cs → AsyncRx.NET/System.Reactive.Async/Internal/FastImmediateAsyncObserver.cs

@@ -10,7 +10,7 @@ namespace System.Reactive
 {
     internal sealed class FastImmediateAsyncObserver<T> : ScheduledAsyncObserverBase<T>
     {
-        private readonly CancellationAsyncDisposable _disposable = new CancellationAsyncDisposable();
+        private readonly CancellationAsyncDisposable _disposable = new();
 
         public FastImmediateAsyncObserver(IAsyncObserver<T> observer)
             : base(observer)
@@ -19,9 +19,9 @@ namespace System.Reactive
 
         public override ValueTask DisposeAsync() => _disposable.DisposeAsync();
 
-        protected override ValueTaskAwaitable RendezVous(ValueTask task) => new ValueTaskAwaitable(task, continueOnCapturedContext: false, scheduler: null, CancellationToken.None);
+        protected override ValueTaskAwaitable RendezVous(ValueTask task) => new(task, continueOnCapturedContext: false, scheduler: null, CancellationToken.None);
 
-        protected override ValueTaskAwaitable<R> RendezVous<R>(ValueTask<R> task) => new ValueTaskAwaitable<R>(task, continueOnCapturedContext: false, scheduler: null, CancellationToken.None);
+        protected override ValueTaskAwaitable<R> RendezVous<R>(ValueTask<R> task) => new(task, continueOnCapturedContext: false, scheduler: null, CancellationToken.None);
 
         protected override ValueTask ScheduleAsync() => RunAsync(_disposable.Token);
     }

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Subjects/System/Reactive/ISchedulerAsyncObserver.cs → AsyncRx.NET/System.Reactive.Async/Internal/ISchedulerAsyncObserver.cs


+ 12 - 12
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Internal/Lookup.cs → AsyncRx.NET/System.Reactive.Async/Internal/Lookup.cs

@@ -10,30 +10,30 @@ namespace System.Reactive
 {
     internal sealed class Lookup<K, E> : ILookup<K, E>
     {
-        private readonly Dictionary<K, List<E>> d;
+        private readonly Dictionary<K, List<E>> _d;
 
         public Lookup(IEqualityComparer<K> comparer)
         {
-            d = new Dictionary<K, List<E>>(comparer);
+            _d = new Dictionary<K, List<E>>(comparer);
         }
 
         public void Add(K key, E element)
         {
-            if (!d.TryGetValue(key, out var list))
-                d[key] = list = new List<E>();
+            if (!_d.TryGetValue(key, out var list))
+                _d[key] = list = new List<E>();
 
             list.Add(element);
         }
 
-        public bool Contains(K key) => d.ContainsKey(key);
+        public bool Contains(K key) => _d.ContainsKey(key);
 
-        public int Count => d.Count;
+        public int Count => _d.Count;
 
         public IEnumerable<E> this[K key]
         {
             get
             {
-                if (!d.TryGetValue(key, out var list))
+                if (!_d.TryGetValue(key, out var list))
                     return Enumerable.Empty<E>();
 
                 return Hide(list);
@@ -48,22 +48,22 @@ namespace System.Reactive
 
         public IEnumerator<IGrouping<K, E>> GetEnumerator()
         {
-            foreach (var kv in d)
+            foreach (var kv in _d)
                 yield return new Grouping(kv);
         }
 
         private sealed class Grouping : IGrouping<K, E>
         {
-            private readonly KeyValuePair<K, List<E>> kv;
+            private readonly KeyValuePair<K, List<E>> _kv;
 
             public Grouping(KeyValuePair<K, List<E>> kv)
             {
-                this.kv = kv;
+                _kv = kv;
             }
 
-            public K Key => kv.Key;
+            public K Key => _kv.Key;
 
-            public IEnumerator<E> GetEnumerator() => kv.Value.GetEnumerator();
+            public IEnumerator<E> GetEnumerator() => _kv.Value.GetEnumerator();
 
             IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
         }

+ 3 - 3
AsyncRx.NET/System.Reactive.Async.Subjects/System/Reactive/ScheduledAsyncObserver.cs → AsyncRx.NET/System.Reactive.Async/Internal/ScheduledAsyncObserver.cs

@@ -13,7 +13,7 @@ namespace System.Reactive
     {
         private readonly IAsyncScheduler _scheduler;
 
-        private readonly SerialAsyncDisposable _disposable = new SerialAsyncDisposable();
+        private readonly SerialAsyncDisposable _disposable = new();
 
         public ScheduledAsyncObserver(IAsyncObserver<T> observer, IAsyncScheduler scheduler)
             : base(observer)
@@ -23,9 +23,9 @@ namespace System.Reactive
 
         public override ValueTask DisposeAsync() => _disposable.DisposeAsync();
 
-        protected override ValueTaskAwaitable RendezVous(ValueTask task) => new ValueTaskAwaitable(task, continueOnCapturedContext: false, _scheduler, CancellationToken.None);
+        protected override ValueTaskAwaitable RendezVous(ValueTask task) => new(task, continueOnCapturedContext: false, _scheduler, CancellationToken.None);
 
-        protected override ValueTaskAwaitable<R> RendezVous<R>(ValueTask<R> task) => new ValueTaskAwaitable<R>(task, continueOnCapturedContext: false, _scheduler, CancellationToken.None);
+        protected override ValueTaskAwaitable<R> RendezVous<R>(ValueTask<R> task) => new(task, continueOnCapturedContext: false, _scheduler, CancellationToken.None);
 
         protected override async ValueTask ScheduleAsync()
         {

+ 2 - 2
AsyncRx.NET/System.Reactive.Async.Subjects/System/Reactive/ScheduledAsyncObserverBase.cs → AsyncRx.NET/System.Reactive.Async/Internal/ScheduledAsyncObserverBase.cs

@@ -12,8 +12,8 @@ namespace System.Reactive
     {
         private readonly IAsyncObserver<T> _observer;
 
-        private readonly AsyncLock _lock = new AsyncLock();
-        private readonly Queue<T> _queue = new Queue<T>();
+        private readonly AsyncGate _lock = new();
+        private readonly Queue<T> _queue = new();
 
         private bool _hasFaulted = false;
         private bool _busy = false;

+ 3 - 10
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/UnsafeAsyncObserver.cs → AsyncRx.NET/System.Reactive.Async/Internal/UnsafeAsyncObserver.cs

@@ -14,16 +14,9 @@ namespace System.Reactive
 
         public UnsafeAsyncObserver(Func<T, ValueTask> onNextAsync, Func<Exception, ValueTask> onErrorAsync, Func<ValueTask> onCompletedAsync)
         {
-            if (onNextAsync == null)
-                throw new ArgumentNullException(nameof(onNextAsync));
-            if (onErrorAsync == null)
-                throw new ArgumentNullException(nameof(onErrorAsync));
-            if (onCompletedAsync == null)
-                throw new ArgumentNullException(nameof(onCompletedAsync));
-
-            _onNextAsync = onNextAsync;
-            _onErrorAsync = onErrorAsync;
-            _onCompletedAsync = onCompletedAsync;
+            _onNextAsync = onNextAsync ?? throw new ArgumentNullException(nameof(onNextAsync));
+            _onErrorAsync = onErrorAsync ?? throw new ArgumentNullException(nameof(onErrorAsync));
+            _onCompletedAsync = onCompletedAsync ?? throw new ArgumentNullException(nameof(onCompletedAsync));
         }
 
         public ValueTask OnCompletedAsync() => _onCompletedAsync();

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/ActiveAsyncPlan.Generated.cs → AsyncRx.NET/System.Reactive.Async/Joins/ActiveAsyncPlan.Generated.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/ActiveAsyncPlan.Generated.tt → AsyncRx.NET/System.Reactive.Async/Joins/ActiveAsyncPlan.Generated.tt


+ 3 - 3
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/ActiveAsyncPlan.cs → AsyncRx.NET/System.Reactive.Async/Joins/ActiveAsyncPlan.cs

@@ -9,18 +9,18 @@ namespace System.Reactive.Joins
 {
     internal abstract class ActiveAsyncPlan
     {
-        private readonly Dictionary<IAsyncJoinObserver, IAsyncJoinObserver> joinObservers = new Dictionary<IAsyncJoinObserver, IAsyncJoinObserver>();
+        private readonly Dictionary<IAsyncJoinObserver, IAsyncJoinObserver> _joinObservers = new();
 
         internal abstract Task Match();
 
         protected void AddJoinObserver(IAsyncJoinObserver joinObserver)
         {
-            joinObservers.Add(joinObserver, joinObserver);
+            _joinObservers.Add(joinObserver, joinObserver);
         }
 
         protected void Dequeue()
         {
-            foreach (var observer in joinObservers.Values)
+            foreach (var observer in _joinObservers.Values)
             {
                 observer.Dequeue();
             }

+ 4 - 4
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/AsyncJoinObserver.cs → AsyncRx.NET/System.Reactive.Async/Joins/AsyncJoinObserver.cs

@@ -15,10 +15,10 @@ namespace System.Reactive.Joins
         private readonly IAsyncObservable<T> _source;
         private readonly Func<Exception, ValueTask> _onError;
 
-        private readonly List<ActiveAsyncPlan> _activePlans = new List<ActiveAsyncPlan>();
-        private readonly SingleAssignmentAsyncDisposable _subscription = new SingleAssignmentAsyncDisposable();
+        private readonly List<ActiveAsyncPlan> _activePlans = new();
+        private readonly SingleAssignmentAsyncDisposable _subscription = new();
 
-        private AsyncLock _gate;
+        private AsyncGate _gate;
         private bool _isDisposed;
 
         public AsyncJoinObserver(IAsyncObservable<T> source, Func<Exception, ValueTask> onError)
@@ -56,7 +56,7 @@ namespace System.Reactive.Joins
             }
         }
 
-        public async Task SubscribeAsync(AsyncLock gate)
+        public async Task SubscribeAsync(AsyncGate gate)
         {
             _gate = gate;
 

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/AsyncPattern.Generated.cs → AsyncRx.NET/System.Reactive.Async/Joins/AsyncPattern.Generated.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/AsyncPattern.Generated.tt → AsyncRx.NET/System.Reactive.Async/Joins/AsyncPattern.Generated.tt


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/AsyncPattern.cs → AsyncRx.NET/System.Reactive.Async/Joins/AsyncPattern.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/AsyncPlan.Generated.cs → AsyncRx.NET/System.Reactive.Async/Joins/AsyncPlan.Generated.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/AsyncPlan.Generated.tt → AsyncRx.NET/System.Reactive.Async/Joins/AsyncPlan.Generated.tt


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/AsyncPlan.cs → AsyncRx.NET/System.Reactive.Async/Joins/AsyncPlan.cs


+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Joins/IAsyncJoinObserver.cs → AsyncRx.NET/System.Reactive.Async/Joins/IAsyncJoinObserver.cs

@@ -9,7 +9,7 @@ namespace System.Reactive.Joins
 {
     internal interface IAsyncJoinObserver : IAsyncDisposable
     {
-        Task SubscribeAsync(AsyncLock gate);
+        Task SubscribeAsync(AsyncGate gate);
 
         void Dequeue();
     }

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/AsyncObservable.cs → AsyncRx.NET/System.Reactive.Async/Linq/AsyncObservable.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/AsyncObserver.cs → AsyncRx.NET/System.Reactive.Async/Linq/AsyncObserver.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/GroupedAsyncObservable.cs → AsyncRx.NET/System.Reactive.Async/Linq/GroupedAsyncObservable.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Interfaces/System/Reactive/Linq/IGroupedAsyncObservable.cs → AsyncRx.NET/System.Reactive.Async/Linq/IGroupedAsyncObservable.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Aggregate.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Aggregate.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/All.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/All.cs


+ 2 - 2
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Amb.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Amb.cs

@@ -83,7 +83,7 @@ namespace System.Reactive.Linq
             if (second == null)
                 throw new ArgumentNullException(nameof(second));
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             var state = AmbState.None;
 
@@ -199,7 +199,7 @@ namespace System.Reactive.Linq
             if (subscriptions == null)
                 throw new ArgumentNullException(nameof(subscriptions));
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             var winner = default(int?);
 

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/And.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/And.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Any.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Any.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Append.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Append.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/AsAsyncObservable.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/AsAsyncObservable.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Average.Generated.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Average.Generated.cs


+ 2 - 2
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Average.Generated.tt → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Average.Generated.tt

@@ -53,7 +53,7 @@ foreach (var t in types)
             if (selector == null)
                 throw new ArgumentNullException(nameof(selector));
 
-            return Build<<#=targetTypeName#>>.From(
+            return CreateAsyncObservable<<#=targetTypeName#>>.From(
                 source,
                 selector,
                 static (source, selector, observer) => source.SubscribeSafeAsync(AsyncObserver.<#=name#><#=methodName#>(observer, selector)));
@@ -66,7 +66,7 @@ foreach (var t in types)
             if (selector == null)
                 throw new ArgumentNullException(nameof(selector));
 
-            return Build<<#=targetTypeName#>>.From(
+            return CreateAsyncObservable<<#=targetTypeName#>>.From(
                 source,
                 selector,
                 static (source, selector, observer) => source.SubscribeSafeAsync(AsyncObserver.<#=name#><#=methodName#>(observer, selector)));

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Average.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Average.cs


+ 5 - 5
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Buffer.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Buffer.cs

@@ -306,7 +306,7 @@ namespace System.Reactive.Linq
 
             async Task<(IAsyncObserver<TSource>, IAsyncDisposable)> CoreAsync()
             {
-                var gate = new AsyncLock();
+                var gate = new AsyncGate();
 
                 var buffer = new List<TSource>();
 
@@ -378,7 +378,7 @@ namespace System.Reactive.Linq
 
             async Task<(IAsyncObserver<TSource>, IAsyncDisposable)> CoreAsync()
             {
-                var gate = new AsyncLock();
+                var gate = new AsyncGate();
 
                 var queue = new Queue<List<TSource>>();
 
@@ -509,7 +509,7 @@ namespace System.Reactive.Linq
 
             async Task<(IAsyncObserver<TSource>, IAsyncDisposable)> CoreAsync()
             {
-                var gate = new AsyncLock();
+                var gate = new AsyncGate();
 
                 var timer = new SerialAsyncDisposable();
 
@@ -586,7 +586,7 @@ namespace System.Reactive.Linq
             if (observer == null)
                 throw new ArgumentNullException(nameof(observer));
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             var buffer = new List<TSource>();
 
@@ -660,7 +660,7 @@ namespace System.Reactive.Linq
             {
                 var closeSubscription = new SerialAsyncDisposable();
 
-                var gate = new AsyncLock();
+                var gate = new AsyncGate();
                 var queueLock = new AsyncQueueLock();
 
                 var buffer = new List<TSource>();

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Case.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Case.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Cast.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Cast.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Catch.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Catch.cs


+ 28 - 28
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/CombineLatest.Generated.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/CombineLatest.Generated.cs

@@ -1827,7 +1827,7 @@ namespace System.Reactive.Linq
             bool isDone2 = false;
             T2 latestValue2 = default(T2);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -1946,7 +1946,7 @@ namespace System.Reactive.Linq
             bool isDone2 = false;
             T2 latestValue2 = default(T2);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -2078,7 +2078,7 @@ namespace System.Reactive.Linq
             bool isDone3 = false;
             T3 latestValue3 = default(T3);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -2243,7 +2243,7 @@ namespace System.Reactive.Linq
             bool isDone3 = false;
             T3 latestValue3 = default(T3);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -2432,7 +2432,7 @@ namespace System.Reactive.Linq
             bool isDone4 = false;
             T4 latestValue4 = default(T4);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -2643,7 +2643,7 @@ namespace System.Reactive.Linq
             bool isDone4 = false;
             T4 latestValue4 = default(T4);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -2889,7 +2889,7 @@ namespace System.Reactive.Linq
             bool isDone5 = false;
             T5 latestValue5 = default(T5);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -3146,7 +3146,7 @@ namespace System.Reactive.Linq
             bool isDone5 = false;
             T5 latestValue5 = default(T5);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -3449,7 +3449,7 @@ namespace System.Reactive.Linq
             bool isDone6 = false;
             T6 latestValue6 = default(T6);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -3752,7 +3752,7 @@ namespace System.Reactive.Linq
             bool isDone6 = false;
             T6 latestValue6 = default(T6);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -4112,7 +4112,7 @@ namespace System.Reactive.Linq
             bool isDone7 = false;
             T7 latestValue7 = default(T7);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -4461,7 +4461,7 @@ namespace System.Reactive.Linq
             bool isDone7 = false;
             T7 latestValue7 = default(T7);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -4878,7 +4878,7 @@ namespace System.Reactive.Linq
             bool isDone8 = false;
             T8 latestValue8 = default(T8);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -5273,7 +5273,7 @@ namespace System.Reactive.Linq
             bool isDone8 = false;
             T8 latestValue8 = default(T8);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -5747,7 +5747,7 @@ namespace System.Reactive.Linq
             bool isDone9 = false;
             T9 latestValue9 = default(T9);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -6188,7 +6188,7 @@ namespace System.Reactive.Linq
             bool isDone9 = false;
             T9 latestValue9 = default(T9);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -6719,7 +6719,7 @@ namespace System.Reactive.Linq
             bool isDone10 = false;
             T10 latestValue10 = default(T10);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -7206,7 +7206,7 @@ namespace System.Reactive.Linq
             bool isDone10 = false;
             T10 latestValue10 = default(T10);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -7794,7 +7794,7 @@ namespace System.Reactive.Linq
             bool isDone11 = false;
             T11 latestValue11 = default(T11);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -8327,7 +8327,7 @@ namespace System.Reactive.Linq
             bool isDone11 = false;
             T11 latestValue11 = default(T11);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -8972,7 +8972,7 @@ namespace System.Reactive.Linq
             bool isDone12 = false;
             T12 latestValue12 = default(T12);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -9551,7 +9551,7 @@ namespace System.Reactive.Linq
             bool isDone12 = false;
             T12 latestValue12 = default(T12);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -10253,7 +10253,7 @@ namespace System.Reactive.Linq
             bool isDone13 = false;
             T13 latestValue13 = default(T13);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -10878,7 +10878,7 @@ namespace System.Reactive.Linq
             bool isDone13 = false;
             T13 latestValue13 = default(T13);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -11637,7 +11637,7 @@ namespace System.Reactive.Linq
             bool isDone14 = false;
             T14 latestValue14 = default(T14);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -12308,7 +12308,7 @@ namespace System.Reactive.Linq
             bool isDone14 = false;
             T14 latestValue14 = default(T14);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -13124,7 +13124,7 @@ namespace System.Reactive.Linq
             bool isDone15 = false;
             T15 latestValue15 = default(T15);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -13841,7 +13841,7 @@ namespace System.Reactive.Linq
             bool isDone15 = false;
             T15 latestValue15 = default(T15);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (

+ 2 - 2
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/CombineLatest.Generated.tt → AsyncRx.NET/System.Reactive.Async/Linq/Operators/CombineLatest.Generated.tt

@@ -161,7 +161,7 @@ for (var j = 1; j <= i; j++)
 }
 #>
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (
@@ -248,7 +248,7 @@ for (var j = 1; j <= i; j++)
 }
 #>
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             return
             (

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Concat.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Concat.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Contains.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Contains.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Count.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Count.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/DefaultIfEmpty.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/DefaultIfEmpty.cs


+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Defer.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Defer.cs

@@ -43,7 +43,7 @@ namespace System.Reactive.Linq
             });
         }
 
-        public static IAsyncObservable<TSource> DeferAsync<TSource>(Func<CancellationToken, ValueTask<IAsyncObservable<TSource>>> observableFactory) => DeferAsync(observableFactory);
+        public static IAsyncObservable<TSource> DeferAsync<TSource>(Func<CancellationToken, ValueTask<IAsyncObservable<TSource>>> observableFactory) => Defer(observableFactory);
 
         public static IAsyncObservable<TSource> Defer<TSource>(Func<CancellationToken, ValueTask<IAsyncObservable<TSource>>> observableFactory)
         {

+ 1 - 1
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Delay.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Delay.cs

@@ -76,7 +76,7 @@ namespace System.Reactive.Linq
 
             var semaphore = new SemaphoreSlim(0);
 
-            var gate = new AsyncLock();
+            var gate = new AsyncGate();
 
             var queue = new Queue<TimeInterval<TSource>>();
             var isDone = false;

+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/DelaySubscription.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/DelaySubscription.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Dematerialize.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Dematerialize.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Distinct.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Distinct.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/DistinctUntilChanged.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/DistinctUntilChanged.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Do.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Do.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/DoWhile.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/DoWhile.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/ElementAt.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/ElementAt.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/ElementAtOrDefault.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/ElementAtOrDefault.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Empty.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Empty.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/Finally.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/Finally.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/First.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/First.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/FirstOrDefault.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/FirstOrDefault.cs


+ 0 - 0
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/For.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/For.cs


+ 2 - 2
AsyncRx.NET/System.Reactive.Async.Linq/System/Reactive/Linq/Operators/ForEachAsync.cs → AsyncRx.NET/System.Reactive.Async/Linq/Operators/ForEachAsync.cs

@@ -124,9 +124,9 @@ namespace System.Reactive.Linq
                 var d = await source.SubscribeAsync(o).ConfigureAwait(false);
 
                 await subscription.AssignAsync(d).ConfigureAwait(false);
-            }
 
-            await tcs.Task.ConfigureAwait(false);
+                await tcs.Task.ConfigureAwait(false);
+            }
         }
     }
 }

Some files were not shown because too many files changed in this diff