From 1a78a86fe661be6841a87eb39e99d362237ee555 Mon Sep 17 00:00:00 2001 From: Hawx Date: Mon, 30 Sep 2019 19:20:00 +0800 Subject: [PATCH] Add updated AsyncEnumerable implementation --- .../Discord.Net.Analyzers.csproj | 2 +- .../Discord.Net.Commands.csproj | 4 ++-- .../Readers/UserTypeReader.cs | 2 +- src/Discord.Net.Core/Discord.Net.Core.csproj | 6 +++--- .../Extensions/AsyncEnumerableExtensions.cs | 2 +- .../Utils/Paging/PagedEnumerator.cs | 16 +++++++++++----- src/Discord.Net.Rest/Discord.Net.Rest.csproj | 4 ++-- .../Discord.Net.WebSocket.csproj | 4 ++-- .../Discord.Net.Webhook.csproj | 2 +- src/Discord.Net/Discord.Net.nuspec | 8 ++++---- .../Discord.Net.Tests.Unit.csproj | 2 +- test/Discord.Net.Tests.Unit/EmbedBuilderTests.cs | 2 +- .../MockedEntities/MockedGroupChannel.cs | 1 - 13 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/Discord.Net.Analyzers/Discord.Net.Analyzers.csproj b/src/Discord.Net.Analyzers/Discord.Net.Analyzers.csproj index 05b9e8117..e96a2be27 100644 --- a/src/Discord.Net.Analyzers/Discord.Net.Analyzers.csproj +++ b/src/Discord.Net.Analyzers/Discord.Net.Analyzers.csproj @@ -4,7 +4,7 @@ Discord.Net.Analyzers Discord.Analyzers A Discord.Net extension adding support for design-time analysis of the API usage. - netstandard2.0 + netstandard2.0;netstandard2.1 diff --git a/src/Discord.Net.Commands/Discord.Net.Commands.csproj b/src/Discord.Net.Commands/Discord.Net.Commands.csproj index 1a7a73fb3..95e7db491 100644 --- a/src/Discord.Net.Commands/Discord.Net.Commands.csproj +++ b/src/Discord.Net.Commands/Discord.Net.Commands.csproj @@ -4,8 +4,8 @@ Discord.Net.Commands Discord.Commands A Discord.Net extension adding support for bot commands. - net461;netstandard2.0 - netstandard2.0 + net461;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 diff --git a/src/Discord.Net.Commands/Readers/UserTypeReader.cs b/src/Discord.Net.Commands/Readers/UserTypeReader.cs index 6d9f1dd8c..c0104e341 100644 --- a/src/Discord.Net.Commands/Readers/UserTypeReader.cs +++ b/src/Discord.Net.Commands/Readers/UserTypeReader.cs @@ -49,7 +49,7 @@ namespace Discord.Commands string username = input.Substring(0, index); if (ushort.TryParse(input.Substring(index + 1), out ushort discriminator)) { - var channelUser = await channelUsers.FirstOrDefault(x => x.DiscriminatorValue == discriminator && + var channelUser = await channelUsers.FirstOrDefaultAsync(x => x.DiscriminatorValue == discriminator && string.Equals(username, x.Username, StringComparison.OrdinalIgnoreCase)).ConfigureAwait(false); AddResult(results, channelUser as T, channelUser?.Username == username ? 0.85f : 0.75f); diff --git a/src/Discord.Net.Core/Discord.Net.Core.csproj b/src/Discord.Net.Core/Discord.Net.Core.csproj index 39f5d0a2d..dd2f2afe3 100644 --- a/src/Discord.Net.Core/Discord.Net.Core.csproj +++ b/src/Discord.Net.Core/Discord.Net.Core.csproj @@ -4,13 +4,13 @@ Discord.Net.Core Discord The core components for the Discord.Net library. - net461;netstandard2.0 - netstandard2.0 + net461;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 - + all diff --git a/src/Discord.Net.Core/Extensions/AsyncEnumerableExtensions.cs b/src/Discord.Net.Core/Extensions/AsyncEnumerableExtensions.cs index 282d20517..d96076259 100644 --- a/src/Discord.Net.Core/Extensions/AsyncEnumerableExtensions.cs +++ b/src/Discord.Net.Core/Extensions/AsyncEnumerableExtensions.cs @@ -15,7 +15,7 @@ namespace Discord /// Flattens the specified pages into one asynchronously. public static async Task> FlattenAsync(this IAsyncEnumerable> source) { - return await source.Flatten().ToArray().ConfigureAwait(false); + return await source.Flatten().ToArrayAsync().ConfigureAwait(false); } /// Flattens the specified pages into one . public static IAsyncEnumerable Flatten(this IAsyncEnumerable> source) diff --git a/src/Discord.Net.Core/Utils/Paging/PagedEnumerator.cs b/src/Discord.Net.Core/Utils/Paging/PagedEnumerator.cs index a31721875..84209902a 100644 --- a/src/Discord.Net.Core/Utils/Paging/PagedEnumerator.cs +++ b/src/Discord.Net.Core/Utils/Paging/PagedEnumerator.cs @@ -25,26 +25,28 @@ namespace Discord _nextPage = nextPage; } - public IAsyncEnumerator> GetEnumerator() => new Enumerator(this); + public IAsyncEnumerator> GetAsyncEnumerator(CancellationToken cancellationToken = new CancellationToken()) => new Enumerator(this, cancellationToken); internal class Enumerator : IAsyncEnumerator> { private readonly PagedAsyncEnumerable _source; + private readonly CancellationToken _token; private readonly PageInfo _info; public IReadOnlyCollection Current { get; private set; } - public Enumerator(PagedAsyncEnumerable source) + public Enumerator(PagedAsyncEnumerable source, CancellationToken token) { _source = source; + _token = token; _info = new PageInfo(source._start, source._count, source.PageSize); } - public async Task MoveNext(CancellationToken cancelToken) + public async ValueTask MoveNextAsync() { if (_info.Remaining == 0) return false; - var data = await _source._getPage(_info, cancelToken).ConfigureAwait(false); + var data = await _source._getPage(_info, _token).ConfigureAwait(false); Current = new Page(_info, data); _info.Page++; @@ -71,7 +73,11 @@ namespace Discord return true; } - public void Dispose() { Current = null; } + public ValueTask DisposeAsync() + { + Current = null; + return default; + } } } } diff --git a/src/Discord.Net.Rest/Discord.Net.Rest.csproj b/src/Discord.Net.Rest/Discord.Net.Rest.csproj index 0bcd5059e..b9592f18d 100644 --- a/src/Discord.Net.Rest/Discord.Net.Rest.csproj +++ b/src/Discord.Net.Rest/Discord.Net.Rest.csproj @@ -4,8 +4,8 @@ Discord.Net.Rest Discord.Rest A core Discord.Net library containing the REST client and models. - net461;netstandard2.0 - netstandard2.0 + net461;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 diff --git a/src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj b/src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj index b40617c43..26a249097 100644 --- a/src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj +++ b/src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj @@ -4,8 +4,8 @@ Discord.Net.WebSocket Discord.WebSocket A core Discord.Net library containing the WebSocket client and models. - net461;netstandard2.0 - netstandard2.0 + net461;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 true diff --git a/src/Discord.Net.Webhook/Discord.Net.Webhook.csproj b/src/Discord.Net.Webhook/Discord.Net.Webhook.csproj index c512a4aa8..f1db66363 100644 --- a/src/Discord.Net.Webhook/Discord.Net.Webhook.csproj +++ b/src/Discord.Net.Webhook/Discord.Net.Webhook.csproj @@ -4,7 +4,7 @@ Discord.Net.Webhook Discord.Webhook A core Discord.Net library containing the Webhook client and models. - netstandard2.0 + netstandard2.0;netstandard2.1 diff --git a/src/Discord.Net/Discord.Net.nuspec b/src/Discord.Net/Discord.Net.nuspec index 3aa0d6add..4b7717e58 100644 --- a/src/Discord.Net/Discord.Net.nuspec +++ b/src/Discord.Net/Discord.Net.nuspec @@ -13,21 +13,21 @@ false https://github.com/RogueException/Discord.Net/raw/dev/docs/marketing/logo/PackageLogo.png - + - - + + - + diff --git a/test/Discord.Net.Tests.Unit/Discord.Net.Tests.Unit.csproj b/test/Discord.Net.Tests.Unit/Discord.Net.Tests.Unit.csproj index 1202777f6..bfec38775 100644 --- a/test/Discord.Net.Tests.Unit/Discord.Net.Tests.Unit.csproj +++ b/test/Discord.Net.Tests.Unit/Discord.Net.Tests.Unit.csproj @@ -1,4 +1,4 @@ - + netcoreapp2.1 diff --git a/test/Discord.Net.Tests.Unit/EmbedBuilderTests.cs b/test/Discord.Net.Tests.Unit/EmbedBuilderTests.cs index 1623d94f2..b0c20031a 100644 --- a/test/Discord.Net.Tests.Unit/EmbedBuilderTests.cs +++ b/test/Discord.Net.Tests.Unit/EmbedBuilderTests.cs @@ -250,7 +250,7 @@ namespace Discord .WithFooter("This is the footer", url) .WithImageUrl(url) .WithThumbnailUrl(url) - .WithTimestamp(DateTime.MinValue) + .WithTimestamp(DateTimeOffset.MinValue) .WithTitle("This is the title") .WithUrl(url) .AddField("Field 1", "Inline", true) diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs index 573ca57c3..8b4e8b0d0 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Text; using System.Threading.Tasks; using Discord.Audio;