const d = new AsyncDisposableStack();
d.defer(async () => console.log(44));
d.defer(async () => console.log(43));
d.defer(() => new Promise(resolve => setTimeout(() => {
console.log(42);
resolve();
}, 1e4)));
await d.disposeAsync();
// only after 10 seconds: 42, 43, 44
That looks strange - why are some resources that can be disposed immediately should wait for something if it can be done in parallel? In case of errors, the tree can be built in the end. However, yes, here is stack in the name...