当结果实现IDisposable时丢弃异步结果


using var notNeeded = await foo();

foo返回一个实现了IDisposable的对象,但是该对象可以立即被丢弃。这句话的惯用写法是什么?

using var notNeeded = await foo(); // (1) possible lint error: unused variable
using var _ = await foo(); // (2) looks clean but lives until the end of the function (which is rarely an issue)
using _ = await foo(); // (3) not legal
using (await foo()); // (4) possible lint error: possible mistaken empty statement
using (await foo()) {} // (5) looks like a mistake but actually does call Dispose() immediately

还有更优雅的方式吗?

我倾向于立即处置不需要的IDisposable对象:

(await foo()).Dispose();

…如果是IAsyncDisposable:

await (await foo()).DisposeAsync();

我会说立即处理它

var notNeeded = await foo();
notNedded.Dispose();

最新更新