浏览代码

Moving Standard Query Operators to System.Linq.Async.

Bart De Smet 8 年之前
父节点
当前提交
1a7192b640
共有 73 个文件被更改,包括 207 次插入77 次删除
  1. 3 3
      Ix.NET/Source/System.Interactive.Async.Tests/AsyncTests.Exceptions.cs
  2. 0 20
      Ix.NET/Source/System.Interactive.Async/AsyncIterator.cs
  3. 0 51
      Ix.NET/Source/System.Interactive.Async/System.Interactive.Async.csproj
  4. 1 1
      Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Retry.cs
  5. 34 1
      Ix.NET/Source/System.Linq.Async/System.Linq.Async.csproj
  6. 0 0
      Ix.NET/Source/System.Linq.Async/System/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs
  7. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/AsyncEnumerable.cs
  8. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/AsyncEnumerableHelpers.cs
  9. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/AsyncEnumerator.cs
  10. 140 0
      Ix.NET/Source/System.Linq.Async/System/Linq/AsyncIterator.cs
  11. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Disposables.cs
  12. 15 0
      Ix.NET/Source/System.Linq.Async/System/Linq/EmptyArray.cs
  13. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/IIListProvider.cs
  14. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Aggregate.cs
  15. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/All.cs
  16. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Any.cs
  17. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/AppendPrepend.cs
  18. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.Generated.cs
  19. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.Generated.tt
  20. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.cs
  21. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Cast.cs
  22. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Concat.cs
  23. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Contains.cs
  24. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Count.cs
  25. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Create.cs
  26. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/DefaultIfEmpty.cs
  27. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Distinct.cs
  28. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ElementAt.cs
  29. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Except.cs
  30. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/First.cs
  31. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ForEach.cs
  32. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupBy.cs
  33. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupJoin.cs
  34. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Grouping.cs
  35. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Intersect.cs
  36. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/IsEmpty.cs
  37. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Join.cs
  38. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Last.cs
  39. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Max.cs
  40. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MaxBy.cs
  41. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Min.cs
  42. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinBy.cs
  43. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinMax.Generated.cs
  44. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinMax.Generated.tt
  45. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderBy.cs
  46. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderedAsyncEnumerable.cs
  47. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Range.cs
  48. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Repeat.cs
  49. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Reverse.cs
  50. 1 1
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Select.cs
  51. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SelectMany.cs
  52. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SequenceEqual.cs
  53. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Single.cs
  54. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Skip.cs
  55. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SkipLast.cs
  56. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SkipWhile.cs
  57. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Sum.Generated.cs
  58. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Sum.Generated.tt
  59. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Take.cs
  60. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/TakeLast.cs
  61. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/TakeWhile.cs
  62. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToArray.cs
  63. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToAsyncEnumerable.cs
  64. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToDictionary.cs
  65. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToList.cs
  66. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToLookup.cs
  67. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToObservable.cs
  68. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Union.cs
  69. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Where.cs
  70. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Zip.cs
  71. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Set.cs
  72. 0 0
      Ix.NET/Source/System.Linq.Async/System/Linq/Strings.cs
  73. 13 0
      Ix.NET/Source/System.Linq.Async/System/Threading/Tasks/TaskExt.cs

+ 3 - 3
Ix.NET/Source/System.Interactive.Async.Tests/AsyncTests.Exceptions.cs

@@ -536,10 +536,10 @@ namespace Tests
         [Fact]
         public void Retry_Null()
         {
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Retry<int>(default(IAsyncEnumerable<int>)));
+            AssertThrows<ArgumentNullException>(() => AsyncEnumerableEx.Retry<int>(default(IAsyncEnumerable<int>)));
 
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Retry<int>(default(IAsyncEnumerable<int>), 1));
-            AssertThrows<ArgumentOutOfRangeException>(() => AsyncEnumerable.Retry<int>(AsyncEnumerable.Return(42), -1));
+            AssertThrows<ArgumentNullException>(() => AsyncEnumerableEx.Retry<int>(default(IAsyncEnumerable<int>), 1));
+            AssertThrows<ArgumentOutOfRangeException>(() => AsyncEnumerableEx.Retry<int>(AsyncEnumerable.Return(42), -1));
         }
 
         [Fact]

+ 0 - 20
Ix.NET/Source/System.Interactive.Async/AsyncIterator.cs

@@ -103,26 +103,6 @@ namespace System.Linq
 
         public abstract AsyncIterator<TSource> Clone();
 
-        public virtual IAsyncEnumerable<TResult> Select<TResult>(Func<TSource, TResult> selector)
-        {
-            return new AsyncEnumerable.SelectEnumerableAsyncIterator<TSource, TResult>(this, selector);
-        }
-
-        public virtual IAsyncEnumerable<TResult> Select<TResult>(Func<TSource, Task<TResult>> selector)
-        {
-            return new AsyncEnumerable.SelectEnumerableAsyncIteratorWithTask<TSource, TResult>(this, selector);
-        }
-
-        public virtual IAsyncEnumerable<TSource> Where(Func<TSource, bool> predicate)
-        {
-            return new AsyncEnumerable.WhereEnumerableAsyncIterator<TSource>(this, predicate);
-        }
-
-        public virtual IAsyncEnumerable<TSource> Where(Func<TSource, Task<bool>> predicate)
-        {
-            return new AsyncEnumerable.WhereEnumerableAsyncIteratorWithTask<TSource>(this, predicate);
-        }
-
         protected abstract Task<bool> MoveNextCore();
 
         protected virtual void OnGetEnumerator()

+ 0 - 51
Ix.NET/Source/System.Interactive.Async/System.Interactive.Async.csproj

@@ -11,63 +11,12 @@
     <EmbeddedResource Include="Properties\System.Interactive.Async.rd.xml" />
   </ItemGroup>
 
-  <ItemGroup>
-    <None Include="Average.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Average.Generated.tt</DependentUpon>
-    </None>
-    <None Include="MinMax.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>MinMax.Generated.tt</DependentUpon>
-    </None>
-    <None Include="Sum.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Sum.Generated.tt</DependentUpon>
-    </None>
-  </ItemGroup>
-
   <ItemGroup>
     <ProjectReference Include="..\System.Linq.Async\System.Linq.Async.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <None Update="Average.Generated.tt">
-      <Generator>TextTemplatingFileGenerator</Generator>
-      <LastGenOutput>Average.Generated.cs</LastGenOutput>
-    </None>
-    <None Update="MinMax.Generated.tt">
-      <Generator>TextTemplatingFileGenerator</Generator>
-      <LastGenOutput>MinMax.Generated.cs</LastGenOutput>
-    </None>
-    <None Update="Sum.Generated.tt">
-      <Generator>TextTemplatingFileGenerator</Generator>
-      <LastGenOutput>Sum.Generated.cs</LastGenOutput>
-    </None>
-  </ItemGroup>
-
   <ItemGroup>
     <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Compile Update="Average.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Average.Generated.tt</DependentUpon>
-    </Compile>
-    <Compile Update="MinMax.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>MinMax.Generated.tt</DependentUpon>
-    </Compile>
-    <Compile Update="Sum.Generated.cs">
-      <DesignTime>True</DesignTime>
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Sum.Generated.tt</DependentUpon>
-    </Compile>
-  </ItemGroup>
-
 </Project>

+ 1 - 1
Ix.NET/Source/System.Interactive.Async/Retry.cs → Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Retry.cs

@@ -6,7 +6,7 @@ using System.Collections.Generic;
 
 namespace System.Linq
 {
-    public static partial class AsyncEnumerable
+    public static partial class AsyncEnumerableEx
     {
         public static IAsyncEnumerable<TSource> Retry<TSource>(this IAsyncEnumerable<TSource> source)
         {

+ 34 - 1
Ix.NET/Source/System.Linq.Async/System.Linq.Async.csproj

@@ -5,7 +5,40 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <Folder Include="System\Linq\Operators\" />
+    <Compile Update="System\Linq\Operators\Average.Generated.cs">
+      <DependentUpon>Average.Generated.tt</DependentUpon>
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+    </Compile>
+    <Compile Update="System\Linq\Operators\MinMax.Generated.cs">
+      <DependentUpon>MinMax.Generated.tt</DependentUpon>
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+    </Compile>
+    <Compile Update="System\Linq\Operators\Sum.Generated.cs">
+      <DependentUpon>Sum.Generated.tt</DependentUpon>
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+    </Compile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Update="System\Linq\Operators\Average.Generated.tt">
+      <LastGenOutput>Average.Generated.cs</LastGenOutput>
+      <Generator>TextTemplatingFileGenerator</Generator>
+    </None>
+    <None Update="System\Linq\Operators\MinMax.Generated.tt">
+      <LastGenOutput>MinMax.Generated.cs</LastGenOutput>
+      <Generator>TextTemplatingFileGenerator</Generator>
+    </None>
+    <None Update="System\Linq\Operators\Sum.Generated.tt">
+      <LastGenOutput>Sum.Generated.cs</LastGenOutput>
+      <Generator>TextTemplatingFileGenerator</Generator>
+    </None>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
   </ItemGroup>
 
 </Project>

+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ExcludeFromCodeCoverageAttribute.cs → Ix.NET/Source/System.Linq.Async/System/Diagnostics/CodeAnalysis/ExcludeFromCodeCoverageAttribute.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.cs → Ix.NET/Source/System.Linq.Async/System/Linq/AsyncEnumerable.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/AsyncEnumerableHelpers.cs → Ix.NET/Source/System.Linq.Async/System/Linq/AsyncEnumerableHelpers.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/AsyncEnumerator.cs → Ix.NET/Source/System.Linq.Async/System/Linq/AsyncEnumerator.cs


+ 140 - 0
Ix.NET/Source/System.Linq.Async/System/Linq/AsyncIterator.cs

@@ -0,0 +1,140 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information. 
+
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace System.Linq
+{
+    internal abstract class AsyncIterator<TSource> : IAsyncEnumerable<TSource>, IAsyncEnumerator<TSource>
+    {
+        private readonly int threadId;
+
+        private CancellationTokenSource cancellationTokenSource;
+        private bool currentIsInvalid = true;
+
+        internal TSource current;
+        internal AsyncIteratorState state = AsyncIteratorState.New;
+
+        protected AsyncIterator()
+        {
+            threadId = Environment.CurrentManagedThreadId;
+        }
+
+        public IAsyncEnumerator<TSource> GetAsyncEnumerator()
+        {
+            var enumerator = state == AsyncIteratorState.New && threadId == Environment.CurrentManagedThreadId ?
+                this :
+                Clone();
+
+            enumerator.state = AsyncIteratorState.Allocated;
+            enumerator.cancellationTokenSource = new CancellationTokenSource();
+
+            try
+            {
+                enumerator.OnGetEnumerator();
+            }
+            catch
+            {
+                enumerator.DisposeAsync(); // REVIEW: fire-and-forget?
+                throw;
+            }
+
+            return enumerator;
+        }
+
+        public virtual Task DisposeAsync()
+        {
+            if (cancellationTokenSource != null)
+            {
+                if (!cancellationTokenSource.IsCancellationRequested)
+                {
+                    cancellationTokenSource.Cancel();
+                }
+
+                cancellationTokenSource.Dispose();
+            }
+
+            current = default(TSource);
+            state = AsyncIteratorState.Disposed;
+
+            return TaskExt.CompletedTask;
+        }
+
+        public TSource Current
+        {
+            get
+            {
+                if (currentIsInvalid)
+                    throw new InvalidOperationException("Enumerator is in an invalid state");
+
+                return current;
+            }
+        }
+
+        public async Task<bool> MoveNextAsync()
+        {
+            // Note: MoveNext *must* be implemented as an async method to ensure
+            // that any exceptions thrown from the MoveNextCore call are handled 
+            // by the try/catch, whether they're sync or async
+
+            if (state == AsyncIteratorState.Disposed)
+            {
+                return false;
+            }
+
+            try
+            {
+                var result = await MoveNextCore().ConfigureAwait(false);
+
+                currentIsInvalid = !result; // if move next is false, invalid otherwise valid
+
+                return result;
+            }
+            catch
+            {
+                currentIsInvalid = true;
+                await DisposeAsync().ConfigureAwait(false);
+                throw;
+            }
+        }
+
+        public abstract AsyncIterator<TSource> Clone();
+
+        public virtual IAsyncEnumerable<TResult> Select<TResult>(Func<TSource, TResult> selector)
+        {
+            return new AsyncEnumerable.SelectEnumerableAsyncIterator<TSource, TResult>(this, selector);
+        }
+
+        public virtual IAsyncEnumerable<TResult> Select<TResult>(Func<TSource, Task<TResult>> selector)
+        {
+            return new AsyncEnumerable.SelectEnumerableAsyncIteratorWithTask<TSource, TResult>(this, selector);
+        }
+
+        public virtual IAsyncEnumerable<TSource> Where(Func<TSource, bool> predicate)
+        {
+            return new AsyncEnumerable.WhereEnumerableAsyncIterator<TSource>(this, predicate);
+        }
+
+        public virtual IAsyncEnumerable<TSource> Where(Func<TSource, Task<bool>> predicate)
+        {
+            return new AsyncEnumerable.WhereEnumerableAsyncIteratorWithTask<TSource>(this, predicate);
+        }
+
+        protected abstract Task<bool> MoveNextCore();
+
+        protected virtual void OnGetEnumerator()
+        {
+        }
+    }
+
+    internal enum AsyncIteratorState
+    {
+        New = 0,
+        Allocated = 1,
+        Iterating = 2,
+        Disposed = -1
+    }
+}

+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Disposables.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Disposables.cs


+ 15 - 0
Ix.NET/Source/System.Linq.Async/System/Linq/EmptyArray.cs

@@ -0,0 +1,15 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information. 
+
+#if NO_ARRAY_EMPTY
+
+namespace System.Linq
+{
+    internal sealed class EmptyArray<TElement>
+    {
+        public static readonly TElement[] Value = new TElement[0];
+    }
+}
+
+#endif

+ 0 - 0
Ix.NET/Source/System.Interactive.Async/IIListProvider.cs → Ix.NET/Source/System.Linq.Async/System/Linq/IIListProvider.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Aggregate.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Aggregate.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/All.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/All.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Any.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Any.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/AppendPrepend.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/AppendPrepend.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Average.Generated.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.Generated.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Average.Generated.tt → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.Generated.tt


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Average.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Average.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Cast.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Cast.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Concat.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Concat.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Contains.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Contains.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Count.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Count.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Create.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Create.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/DefaultIfEmpty.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/DefaultIfEmpty.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Distinct.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Distinct.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ElementAt.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ElementAt.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Except.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Except.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/First.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/First.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ForEach.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ForEach.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/GroupBy.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupBy.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/GroupJoin.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupJoin.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Grouping.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Grouping.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Intersect.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Intersect.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/IsEmpty.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/IsEmpty.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Join.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Join.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Last.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Last.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Max.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Max.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/MaxBy.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MaxBy.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Min.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Min.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/MinBy.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinBy.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/MinMax.Generated.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinMax.Generated.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/MinMax.Generated.tt → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/MinMax.Generated.tt


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/OrderBy.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderBy.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/OrderedAsyncEnumerable.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderedAsyncEnumerable.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Range.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Range.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Repeat.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Repeat.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Reverse.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Reverse.cs


+ 1 - 1
Ix.NET/Source/System.Interactive.Async/Select.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Select.cs

@@ -444,4 +444,4 @@ namespace System.Linq
             }
         }
     }
-}
+}

+ 0 - 0
Ix.NET/Source/System.Interactive.Async/SelectMany.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SelectMany.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/SequenceEqual.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SequenceEqual.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Single.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Single.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Skip.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Skip.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/SkipLast.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SkipLast.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/SkipWhile.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SkipWhile.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Sum.Generated.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Sum.Generated.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Sum.Generated.tt → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Sum.Generated.tt


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Take.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Take.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/TakeLast.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/TakeLast.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/TakeWhile.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/TakeWhile.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ToArray.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToArray.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ToAsyncEnumerable.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToAsyncEnumerable.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ToDictionary.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToDictionary.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ToList.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToList.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ToLookup.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToLookup.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/ToObservable.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToObservable.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Union.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Union.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Where.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Where.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Zip.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Zip.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Set.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Set.cs


+ 0 - 0
Ix.NET/Source/System.Interactive.Async/Strings.cs → Ix.NET/Source/System.Linq.Async/System/Linq/Strings.cs


+ 13 - 0
Ix.NET/Source/System.Linq.Async/System/Threading/Tasks/TaskExt.cs

@@ -0,0 +1,13 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information. 
+
+namespace System.Threading.Tasks
+{
+    internal static class TaskExt
+    {
+        public static readonly Task<bool> True = Task.FromResult(true);
+        public static readonly Task<bool> False = Task.FromResult(false);
+        public static readonly Task CompletedTask = True;
+    }
+}