mirror of
https://github.com/TeamOctolings/Octobot.git
synced 2025-04-30 19:19:54 +03:00
Force enumeration of global collections before using them (#106)
This PR closes #105 This PR fixes exceptions caused by changing a collection's contents while it is being enumerated. This can often happen with Guild- and MemberDatas. By using `ToArray()` on these global collections and using it in the `foreach` loop, we create a new copy of the collection, preventing any modification to it. While this does introduce a lot of memory allocations, there is no fixing that. Usually, the fix to these exceptions would be to convert the `foreach` to a reverse-`for`. However, because indices cannot be used on these collections, that is not possible. Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This commit is contained in:
parent
81595e58d3
commit
438ecfb41b
3 changed files with 8 additions and 6 deletions
|
@ -63,7 +63,8 @@ public sealed partial class MemberUpdateService : BackgroundService
|
|||
var guildData = await _guildData.GetData(guildId, ct);
|
||||
var defaultRole = GuildSettings.DefaultRole.Get(guildData.Settings);
|
||||
var failedResults = new List<Result>();
|
||||
foreach (var data in guildData.MemberData.Values)
|
||||
var memberDatas = guildData.MemberData.Values.ToArray();
|
||||
foreach (var data in memberDatas)
|
||||
{
|
||||
var tickResult = await TickMemberDataAsync(guildId, guildData, defaultRole, data, ct);
|
||||
failedResults.AddIfFailed(tickResult);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue