Change exception handling when sending a request.

1) Now RetryAfter  is multiplied by 1000, because request contains value in second instead milliseconds. (see https://core.telegram.org/bots/api#responseparameters)
2) Now calls occur in a loop, but a limited number of times. This also ensures that exceptions are caught during a repeated request.
This commit is contained in:
Xilosof 2021-03-14 22:00:51 +03:00
parent 706b0f522a
commit e742ded371

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
@ -769,21 +769,25 @@ namespace TelegramBotBase.Sessions
/// <param name="call"></param>
/// <returns></returns>
public async Task<T> API<T>(Func<Telegram.Bot.TelegramBotClient, Task<T>> call)
{
var numberOfTries = 0;
while (numberOfTries < DeviceSession.MaxNumberOfRetries)
{
try
{
return await call(this.Client.TelegramClient);
return await call(Client.TelegramClient);
}
catch (ApiRequestException ex)
{
if (ex.ErrorCode != 429)
throw;
if (ex.Parameters != null)
{
await Task.Delay(ex.Parameters.RetryAfter);
await Task.Delay(ex.Parameters.RetryAfter * 1000);
return await call(this.Client.TelegramClient);
numberOfTries++;
}
}
return default(T);
}
@ -793,18 +797,24 @@ namespace TelegramBotBase.Sessions
/// <param name="call"></param>
/// <returns></returns>
public async Task API(Func<Telegram.Bot.TelegramBotClient, Task> call)
{
var numberOfTries = 0;
while (numberOfTries < DeviceSession.MaxNumberOfRetries)
{
try
{
await call(this.Client.TelegramClient);
await call(Client.TelegramClient);
return;
}
catch (ApiRequestException ex)
{
if (ex.Parameters != null)
{
await Task.Delay(ex.Parameters.RetryAfter);
if (ex.ErrorCode != 429)
throw;
await call(this.Client.TelegramClient);
if (ex.Parameters != null)
await Task.Delay(ex.Parameters.RetryAfter * 1000);
numberOfTries++;
}
}
}