From 95d71e88fec1bc76446326b7e428228fdff9de09 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sat, 4 May 2019 23:33:08 +0200 Subject: [PATCH] Improve concurrent entries further --- ArchiSteamFarm/Bot.cs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index f3e7f2da0..87ca8903a 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -65,6 +65,8 @@ namespace ArchiSteamFarm { private static readonly SemaphoreSlim LoginRateLimitingSemaphore = new SemaphoreSlim(1, 1); private static readonly SemaphoreSlim LoginSemaphore = new SemaphoreSlim(1, 1); + private static bool LoginRateLimited; + [JsonIgnore] [PublicAPI] public readonly Actions Actions; @@ -2081,13 +2083,24 @@ namespace ArchiSteamFarm { case EResult.RateLimitExceeded: ArchiLogger.LogGenericInfo(string.Format(Strings.BotRateLimitExceeded, TimeSpan.FromMinutes(LoginCooldownInMinutes).ToHumanReadable())); - if (await LoginRateLimitingSemaphore.WaitAsync(WebBrowser.MaxTries * 1000).ConfigureAwait(false)) { - Utilities.InBackground( - async () => { - await Task.Delay(LoginCooldownInMinutes * 60 * 1000).ConfigureAwait(false); - LoginRateLimitingSemaphore.Release(); - } - ); + if (LoginRateLimited) { + break; + } + + await LoginRateLimitingSemaphore.WaitAsync().ConfigureAwait(false); + + try { + if (LoginRateLimited) { + break; + } + + LoginRateLimited = true; + + await Task.Delay(LoginCooldownInMinutes * 60 * 1000).ConfigureAwait(false); + + LoginRateLimited = false; + } finally { + LoginRateLimitingSemaphore.Release(); } break;