





















@@ -110,9 +110,7 @@ export class TelegramPollingSession {
110110 #forceRestarted = false;
111111 #activeRunner: ReturnType<typeof run> | undefined;
112112 #activeFetchAbort: AbortController | undefined;
113- #spooledUpdatesInFlight = new Set<number>();
114- #spooledUpdateLanesInFlight = new Set<string>();
115- #spooledUpdateHandlerPromises = new Set<Promise<boolean>>();
113+ #spooledUpdateHandlersByLane = new Map<string, Promise<boolean>>();
116114 #transportState: TelegramPollingTransportState;
117115 #status: ReturnType<typeof createTelegramPollingStatusPublisher>;
118116 #stallThresholdMs: number;
@@ -266,7 +264,6 @@ export class TelegramPollingSession {
266264async #handleSpooledUpdate(params: {
267265bot: TelegramBot;
268266update: TelegramSpooledUpdate;
269-laneKey: string;
270267}): Promise<boolean> {
271268try {
272269await params.bot.handleUpdate(
@@ -279,18 +276,11 @@ export class TelegramPollingSession {
279276`[telegram][diag] spooled update ${params.update.updateId} failed; keeping for retry: ${formatErrorMessage(err)}`,
280277);
281278return false;
282-} finally {
283-this.#spooledUpdatesInFlight.delete(params.update.updateId);
284-this.#spooledUpdateLanesInFlight.delete(params.laneKey);
285279}
286280}
287281288282async #waitForSpooledUpdateHandlers(): Promise<void> {
289-const pending = [...this.#spooledUpdateHandlerPromises];
290-if (pending.length === 0) {
291-return;
292-}
293-await Promise.allSettled(pending);
283+await Promise.allSettled(this.#spooledUpdateHandlersByLane.values());
294284}
295285296286async #drainSpooledUpdates(params: { bot: TelegramBot; spoolDir: string }): Promise<number> {
@@ -304,22 +294,16 @@ export class TelegramPollingSession {
304294if (this.opts.abortSignal?.aborted) {
305295break;
306296}
307-if (this.#spooledUpdatesInFlight.has(update.updateId)) {
308-continue;
309-}
310-if (this.#spooledUpdateLanesInFlight.has(laneKey)) {
297+if (this.#spooledUpdateHandlersByLane.has(laneKey)) {
311298continue;
312299}
313-this.#spooledUpdatesInFlight.add(update.updateId);
314-this.#spooledUpdateLanesInFlight.add(laneKey);
315300const handler = this.#handleSpooledUpdate({
316301bot: params.bot,
317302 update,
318- laneKey,
319303});
320-this.#spooledUpdateHandlerPromises.add(handler);
304+this.#spooledUpdateHandlersByLane.set(laneKey, handler);
321305void handler.finally(() => {
322-this.#spooledUpdateHandlerPromises.delete(handler);
306+this.#spooledUpdateHandlersByLane.delete(laneKey);
323307});
324308started += 1;
325309}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。