Skip to content

Commit 3529def

Browse files
authored
Merge pull request #904 from dotnet/more_csharp8
Use some more C# 8.0 features for async Ix
2 parents f417a7c + c23993c commit 3529def

35 files changed

+911
-947
lines changed

Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/DistinctUntilChanged.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,7 @@ public static IAsyncEnumerable<TSource> DistinctUntilChanged<TSource, TKey>(this
9494
private static IAsyncEnumerable<TSource> DistinctUntilChangedCore<TSource>(IAsyncEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
9595
{
9696
#if USE_ASYNC_ITERATOR
97-
if (comparer == null)
98-
{
99-
comparer = EqualityComparer<TSource>.Default;
100-
}
97+
comparer ??= EqualityComparer<TSource>.Default;
10198

10299
return AsyncEnumerable.Create(Core);
103100

@@ -135,10 +132,7 @@ async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
135132
private static IAsyncEnumerable<TSource> DistinctUntilChangedCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
136133
{
137134
#if USE_ASYNC_ITERATOR
138-
if (comparer == null)
139-
{
140-
comparer = EqualityComparer<TKey>.Default;
141-
}
135+
comparer ??= EqualityComparer<TKey>.Default;
142136

143137
return AsyncEnumerable.Create(Core);
144138

@@ -180,10 +174,7 @@ async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
180174
private static IAsyncEnumerable<TSource> DistinctUntilChangedCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<TKey>> keySelector, IEqualityComparer<TKey> comparer)
181175
{
182176
#if USE_ASYNC_ITERATOR
183-
if (comparer == null)
184-
{
185-
comparer = EqualityComparer<TKey>.Default;
186-
}
177+
comparer ??= EqualityComparer<TKey>.Default;
187178

188179
return AsyncEnumerable.Create(Core);
189180

@@ -226,10 +217,7 @@ async IAsyncEnumerator<TSource> Core(CancellationToken cancellationToken)
226217
private static IAsyncEnumerable<TSource> DistinctUntilChangedCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<TKey>> keySelector, IEqualityComparer<TKey> comparer)
227218
{
228219
#if USE_ASYNC_ITERATOR
229-
if (comparer == null)
230-
{
231-
comparer = EqualityComparer<TKey>.Default;
232-
}
220+
comparer ??= EqualityComparer<TKey>.Default;
233221

234222
return AsyncEnumerable.Create(Core);
235223

Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/IsEmpty.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ public static ValueTask<bool> IsEmptyAsync<TSource>(this IAsyncEnumerable<TSourc
1717

1818
return Core(source, cancellationToken);
1919

20-
static async ValueTask<bool> Core(IAsyncEnumerable<TSource> _source, CancellationToken _cancellationToken)
20+
static async ValueTask<bool> Core(IAsyncEnumerable<TSource> source, CancellationToken cancellationToken)
2121
{
22-
await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
22+
await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
2323
{
2424
return !await e.MoveNextAsync();
2525
}

Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Max.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,11 @@ public static ValueTask<TSource> MaxAsync<TSource>(this IAsyncEnumerable<TSource
1717

1818
return Core(source, comparer, cancellationToken);
1919

20-
static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, IComparer<TSource> _comparer, CancellationToken _cancellationToken)
20+
static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> source, IComparer<TSource> comparer, CancellationToken cancellationToken)
2121
{
22-
if (_comparer == null)
23-
{
24-
_comparer = Comparer<TSource>.Default;
25-
}
22+
comparer ??= Comparer<TSource>.Default;
2623

27-
await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
24+
await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
2825
{
2926
if (!await e.MoveNextAsync())
3027
throw Error.NoElements();
@@ -35,7 +32,7 @@ static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, ICompare
3532
{
3633
var cur = e.Current;
3734

38-
if (_comparer.Compare(cur, max) > 0)
35+
if (comparer.Compare(cur, max) > 0)
3936
{
4037
max = cur;
4138
}

Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/MaxBy.cs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,31 +76,22 @@ public static ValueTask<IList<TSource>> MaxByAsync<TSource, TKey>(this IAsyncEnu
7676

7777
private static ValueTask<IList<TSource>> MaxByCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IComparer<TKey> comparer, CancellationToken cancellationToken)
7878
{
79-
if (comparer == null)
80-
{
81-
comparer = Comparer<TKey>.Default;
82-
}
79+
comparer ??= Comparer<TKey>.Default;
8380

8481
return ExtremaBy(source, keySelector, (key, minValue) => comparer.Compare(key, minValue), cancellationToken);
8582
}
8683

8784
private static ValueTask<IList<TSource>> MaxByCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<TKey>> keySelector, IComparer<TKey> comparer, CancellationToken cancellationToken)
8885
{
89-
if (comparer == null)
90-
{
91-
comparer = Comparer<TKey>.Default;
92-
}
86+
comparer ??= Comparer<TKey>.Default;
9387

9488
return ExtremaBy(source, keySelector, (key, minValue) => comparer.Compare(key, minValue), cancellationToken);
9589
}
9690

9791
#if !NO_DEEP_CANCELLATION
9892
private static ValueTask<IList<TSource>> MaxByCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<TKey>> keySelector, IComparer<TKey> comparer, CancellationToken cancellationToken)
9993
{
100-
if (comparer == null)
101-
{
102-
comparer = Comparer<TKey>.Default;
103-
}
94+
comparer ??= Comparer<TKey>.Default;
10495

10596
return ExtremaBy(source, keySelector, (key, minValue) => comparer.Compare(key, minValue), cancellationToken);
10697
}

Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/Min.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,11 @@ public static ValueTask<TSource> MinAsync<TSource>(this IAsyncEnumerable<TSource
1717

1818
return Core(source, comparer, cancellationToken);
1919

20-
static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, IComparer<TSource> _comparer, CancellationToken _cancellationToken)
20+
static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> source, IComparer<TSource> comparer, CancellationToken cancellationToken)
2121
{
22-
if (_comparer == null)
23-
{
24-
_comparer = Comparer<TSource>.Default;
25-
}
22+
comparer ??= Comparer<TSource>.Default;
2623

27-
await using (var e = _source.GetConfiguredAsyncEnumerator(_cancellationToken, false))
24+
await using (var e = source.GetConfiguredAsyncEnumerator(cancellationToken, false))
2825
{
2926
if (!await e.MoveNextAsync())
3027
throw Error.NoElements();
@@ -35,7 +32,7 @@ static async ValueTask<TSource> Core(IAsyncEnumerable<TSource> _source, ICompare
3532
{
3633
var cur = e.Current;
3734

38-
if (_comparer.Compare(cur, min) < 0)
35+
if (comparer.Compare(cur, min) < 0)
3936
{
4037
min = cur;
4138
}

Ix.NET/Source/System.Interactive.Async/System/Linq/Operators/MinBy.cs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,31 +76,22 @@ public static ValueTask<IList<TSource>> MinByAsync<TSource, TKey>(this IAsyncEnu
7676

7777
private static ValueTask<IList<TSource>> MinByCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IComparer<TKey> comparer, CancellationToken cancellationToken)
7878
{
79-
if (comparer == null)
80-
{
81-
comparer = Comparer<TKey>.Default;
82-
}
79+
comparer ??= Comparer<TKey>.Default;
8380

8481
return ExtremaBy(source, keySelector, (key, minValue) => -comparer.Compare(key, minValue), cancellationToken);
8582
}
8683

8784
private static ValueTask<IList<TSource>> MinByCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<TKey>> keySelector, IComparer<TKey> comparer, CancellationToken cancellationToken)
8885
{
89-
if (comparer == null)
90-
{
91-
comparer = Comparer<TKey>.Default;
92-
}
86+
comparer ??= Comparer<TKey>.Default;
9387

9488
return ExtremaBy(source, keySelector, (key, minValue) => -comparer.Compare(key, minValue), cancellationToken);
9589
}
9690

9791
#if !NO_DEEP_CANCELLATION
9892
private static ValueTask<IList<TSource>> MinByCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<TKey>> keySelector, IComparer<TKey> comparer, CancellationToken cancellationToken)
9993
{
100-
if (comparer == null)
101-
{
102-
comparer = Comparer<TKey>.Default;
103-
}
94+
comparer ??= Comparer<TKey>.Default;
10495

10596
return ExtremaBy(source, keySelector, (key, minValue) => -comparer.Compare(key, minValue), cancellationToken);
10697
}

Ix.NET/Source/System.Linq.Async/System.Linq.Async.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,8 @@
8787
</None>
8888
</ItemGroup>
8989

90+
<ItemGroup>
91+
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
92+
</ItemGroup>
93+
9094
</Project>

0 commit comments

Comments
 (0)