Skip to content

Commit cbeae1b

Browse files
authored
chore: cleanup usage of AsyncIterableObject (microsoft#256868)
refs microsoft#256854
1 parent c417219 commit cbeae1b

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

src/vs/base/common/async.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2378,7 +2378,7 @@ class ProducerConsumer<T> {
23782378
export class AsyncIterableProducer<T> implements AsyncIterable<T> {
23792379
private readonly _producerConsumer = new ProducerConsumer<IteratorResult<T>>();
23802380

2381-
constructor(executor: AsyncIterableExecutor<T>) {
2381+
constructor(executor: AsyncIterableExecutor<T>, private readonly _onReturn?: () => void) {
23822382
queueMicrotask(async () => {
23832383
const p = executor({
23842384
emitOne: value => this._producerConsumer.produce({ ok: true, value: { done: false, value: value } }),
@@ -2411,6 +2411,10 @@ export class AsyncIterableProducer<T> implements AsyncIterable<T> {
24112411

24122412
private readonly _iterator: AsyncIterator<T, void, void> = {
24132413
next: () => this._producerConsumer.consume(),
2414+
return: () => {
2415+
this._onReturn?.();
2416+
return Promise.resolve({ done: true, value: undefined });
2417+
},
24142418
throw: async (e) => {
24152419
this._finishError(e);
24162420
return { done: true, value: undefined };

src/vs/workbench/contrib/mcp/common/mcpServer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { AsyncIterableObject, raceCancellationError, Sequencer } from '../../../../base/common/async.js';
6+
import { AsyncIterableProducer, raceCancellationError, Sequencer } from '../../../../base/common/async.js';
77
import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js';
88
import { Iterable } from '../../../../base/common/iterator.js';
99
import * as json from '../../../../base/common/json.js';
@@ -441,7 +441,7 @@ export class McpServer extends Disposable implements IMcpServer {
441441

442442
public resources(token?: CancellationToken): AsyncIterable<IMcpResource[]> {
443443
const cts = new CancellationTokenSource(token);
444-
return new AsyncIterableObject<IMcpResource[]>(async emitter => {
444+
return new AsyncIterableProducer<IMcpResource[]>(async emitter => {
445445
await McpServer.callOn(this, async (handler) => {
446446
for await (const resource of handler.listResourcesIterable({}, cts.token)) {
447447
emitter.emitOne(resource.map(r => new McpResource(this, r)));

0 commit comments

Comments
 (0)