From 12f8359b909f897a0b80ea7c8fa52e5a4111fbf8 Mon Sep 17 00:00:00 2001 From: Noi Date: Sat, 3 Dec 2022 17:21:20 -0800 Subject: [PATCH] Move member cache updating off main thread --- Services/EntityCache/UserCachingSubservice.cs | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Services/EntityCache/UserCachingSubservice.cs b/Services/EntityCache/UserCachingSubservice.cs index 292ec19..e7c5c2f 100644 --- a/Services/EntityCache/UserCachingSubservice.cs +++ b/Services/EntityCache/UserCachingSubservice.cs @@ -18,15 +18,22 @@ class UserCachingSubservice { bot.DiscordClient.GuildMemberUpdated += DiscordClient_GuildMemberUpdated; bot.DiscordClient.UserUpdated += DiscordClient_UserUpdated; } - private async Task DiscordClient_GuildMembersDownloaded(SocketGuild arg) { - _log($"{arg.Name}: Full member list obtained. Cache update in progress."); - using var db = new BotDatabaseContext(); - foreach (var user in arg.Users) { - UpdateUser(user, db); - UpdateGuildUser(user, db); - } - var changes = await db.SaveChangesAsync(); - _log($"{arg.Name}: Member caches updated ({changes} database writes)."); + private Task DiscordClient_GuildMembersDownloaded(SocketGuild arg) { + var userlist = arg.Users.ToList(); + _ = Task.Run(async () => { + try { + using var db = new BotDatabaseContext(); + foreach (var user in userlist) { + UpdateUser(user, db); + UpdateGuildUser(user, db); + } + var changes = await db.SaveChangesAsync(); + _log($"{arg.Name}: Member caches updated ({changes} database writes)."); + } catch (Exception ex) { + _log($"{arg.Name}: {ex}"); + } + }); + return Task.CompletedTask; } private async Task DiscordClient_GuildMemberUpdated(Discord.Cacheable old, SocketGuildUser current) {