From 1a49c80bc47d0ed04bce9115d4834fa2808ffc3e Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sun, 20 Nov 2016 00:03:27 +0100 Subject: [PATCH] Misc --- ArchiSteamFarm/Trading.cs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/ArchiSteamFarm/Trading.cs b/ArchiSteamFarm/Trading.cs index 4d53de082..79a84ec7f 100644 --- a/ArchiSteamFarm/Trading.cs +++ b/ArchiSteamFarm/Trading.cs @@ -62,7 +62,7 @@ namespace ArchiSteamFarm { private readonly ConcurrentHashSet IgnoredTrades = new ConcurrentHashSet(); private readonly SemaphoreSlim TradesSemaphore = new SemaphoreSlim(1); - private byte ParsingTasks; + private bool ParsingScheduled; internal static async Task LimitInventoryRequestsAsync() { await InventorySemaphore.WaitAsync().ConfigureAwait(false); @@ -88,22 +88,27 @@ namespace ArchiSteamFarm { internal void OnDisconnected() => IgnoredTrades.ClearAndTrim(); internal async Task CheckTrades() { + // We aim to have a maximum of 2 tasks, one already parsing, and one waiting in the queue + // This way we can call this function as many times as needed e.g. because of Steam events lock (TradesSemaphore) { - if (ParsingTasks >= 2) { + if (ParsingScheduled) { return; } - ParsingTasks++; + ParsingScheduled = true; } await TradesSemaphore.WaitAsync().ConfigureAwait(false); - await ParseActiveTrades().ConfigureAwait(false); - lock (TradesSemaphore) { - ParsingTasks--; - } + try { + lock (TradesSemaphore) { + ParsingScheduled = false; + } - TradesSemaphore.Release(); + await ParseActiveTrades().ConfigureAwait(false); + } finally { + TradesSemaphore.Release(); + } } private async Task ParseActiveTrades() {