Adding .NET 4.7.2 back into with conditional compilation

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives
This commit is contained in:
FlorianDahn 2021-07-26 13:32:32 +02:00
parent 84d18f6f45
commit 6c2543630d
2 changed files with 39 additions and 1 deletions

View File

@ -131,6 +131,7 @@ namespace TelegramBotBase.Form
{
var oldMessages = OldMessages.AsEnumerable();
#if !NET472
while (oldMessages.Any())
{
using var cts = new CancellationTokenSource();
@ -162,6 +163,43 @@ namespace TelegramBotBase.Form
if (retryAfterTask != null)
await retryAfterTask;
}
#else
while (oldMessages.Any())
{
using (var cts = new CancellationTokenSource())
{
var deletedMessages = new ConcurrentBag<int>();
var parallelQuery = OldMessages.AsParallel()
.WithCancellation(cts.Token);
Task retryAfterTask = null;
try
{
parallelQuery.ForAll(i =>
{
Device.DeleteMessage(i).GetAwaiter().GetResult();
deletedMessages.Add(i);
});
}
catch (AggregateException ex)
{
cts.Cancel();
var retryAfterSeconds = ex.InnerExceptions
.Where(e => e is ApiRequestException apiEx && apiEx.ErrorCode == 429)
.Max(e => (int?)((ApiRequestException)e).Parameters.RetryAfter) ?? 0;
retryAfterTask = Task.Delay(retryAfterSeconds * 1000);
}
deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i)));
oldMessages = oldMessages.Where(x => !deletedMessages.Contains(x));
if (retryAfterTask != null)
await retryAfterTask;
}
}
#endif
OldMessages.Clear();
}

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.1;net5;netcoreapp3.1</TargetFrameworks>
<TargetFrameworks>netstandard2.1;net472;net5;netcoreapp3.1</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>