From f4364b3bd3069066026d9ed2e0be92ff9645a384 Mon Sep 17 00:00:00 2001 From: Jiang Huiyuan <63080549+SuperJuice666@users.noreply.github.com> Date: Wed, 11 Mar 2026 19:28:48 +0800 Subject: [PATCH] Refactor concurrency management in decryptOne function Refactor concurrency handling in decryption process to use a Set for tracking promises instead of an array. This improves performance by simplifying the removal of completed promises. --- src/pages/ChatPage.tsx | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index 357e1df..a535d7c 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -3485,20 +3485,17 @@ function ChatPage(props: ChatPageProps) { } // 并发池:同时跑 concurrency 个任务 - const pool: Promise[] = [] + const pool = new Set>() for (const img of images) { - const p = decryptOne(img) - pool.push(p) - if (pool.length >= concurrency) { + const p = decryptOne(img).then(() => { pool.delete(p) }) + pool.add(p) + if (pool.size >= concurrency) { await Promise.race(pool) - // 移除已完成的 - for (let j = pool.length - 1; j >= 0; j--) { - const settled = await Promise.race([pool[j].then(() => true), Promise.resolve(false)]) - if (settled) pool.splice(j, 1) - } } } - await Promise.all(pool) + if (pool.size > 0) { + await Promise.all(pool) + } finishDecrypt(successCount, failCount) }, [batchImageMessages, batchImageSelectedDates, batchDecryptConcurrency, currentSessionId, finishDecrypt, sessions, startDecrypt, updateDecryptProgress])