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