Only for loops need a copy

I knew something is fishy here, https://blogs.msdn.microsoft.com/ericlippert/2009/11/12/closing-over-the-loop-variable-considered-harmful/
This commit is contained in:
JustArchi
2016-01-24 03:58:19 +01:00
parent ea1b401228
commit 8603e7a579
3 changed files with 4 additions and 7 deletions

View File

@@ -115,8 +115,7 @@ namespace ArchiSteamFarm {
internal static async Task ShutdownAllBots() {
List<Task> tasks = new List<Task>();
foreach (Bot bot in Bots.Values) {
Bot currentBot = bot;
tasks.Add(Task.Run(async () => await currentBot.Shutdown().ConfigureAwait(false)));
tasks.Add(Task.Run(async () => await bot.Shutdown().ConfigureAwait(false)));
}
await Task.WhenAll(tasks).ConfigureAwait(false);
}

View File

@@ -272,7 +272,7 @@ namespace ArchiSteamFarm {
if (page == 1) {
CheckPage(htmlDocument); // Because we fetched page number 1 already
} else {
byte currentPage = page;
byte currentPage = page; // We need a copy of variable being passed when in for loops
checkPagesTasks.Add(Task.Run(async () => await CheckPage(currentPage).ConfigureAwait(false)));
}
}
@@ -287,8 +287,7 @@ namespace ArchiSteamFarm {
List<Task> checkHoursTasks = new List<Task>();
Logging.LogGenericInfo(Bot.BotName, "Checking hours...");
foreach (uint appID in GamesToFarm.Keys) {
uint currentAppID = appID;
checkHoursTasks.Add(Task.Run(async () => await CheckHours(currentAppID).ConfigureAwait(false)));
checkHoursTasks.Add(Task.Run(async () => await CheckHours(appID).ConfigureAwait(false)));
}
await Task.WhenAll(checkHoursTasks).ConfigureAwait(false);
}

View File

@@ -60,8 +60,7 @@ namespace ArchiSteamFarm {
List<Task> tasks = new List<Task>();
foreach (SteamTradeOffer tradeOffer in tradeOffers) {
if (tradeOffer.trade_offer_state == SteamTradeOffer.ETradeOfferState.Active) {
SteamTradeOffer currentTradeOffer = tradeOffer;
tasks.Add(Task.Run(async () => await ParseTrade(currentTradeOffer).ConfigureAwait(false)));
tasks.Add(Task.Run(async () => await ParseTrade(tradeOffer).ConfigureAwait(false)));
}
}