使用和等待使用之间有什么区别?而我该如何决定使用哪个呢?

问题描述 投票:2回答:1

我注意到在某些情况下,Visual Studio建议这样做

await using var disposable = new Disposable();
// Do something

代替此

using var disposable = new Disposable();
// Do something

usingawait using有什么区别?

我应该如何决定使用哪个?

c# .net-core .net-standard .net-core-3.0 .net-standard-2.1
1个回答
12
投票

经典同步使用

经典使用调用实现Dispose()接口的对象的IDisposable方法。

using var disposable = new Disposable();
// Do Something...

相当于

IDisposable disposable = new Disposable();
try
{
    // Do Something...
}
finally
{
    disposable.Dispose();
}

新异步等待使用

新的等待使用调用并等待实现DisposeAsync()接口的对象的IAsyncDisposable方法。

await using var disposable = new AsyncDisposable();
// Do Something...

相当于

IAsyncDisposable disposable = new AsyncDisposable();
try
{
    // Do Something...
}
finally
{
    await disposable.DisposeAsync();
}

[IAsyncDisposable Interface被添加到.NET Core 3.0.NET Standard 2.1中。

在.NET中,拥有非托管资源的类通常实现IDisposable接口,以提供一种用于同步释放非托管资源的机制。但是,在某些情况下,它们需要提供一种异步机制来释放(而不是同步)同步的非托管资源。提供这种机制可使使用者执行资源密集型的处置操作,而不会长时间阻塞GUI应用程序的主线程。

此接口的IAsyncDisposable.DisposeAsync方法返回代表异步处理操作的ValueTask。拥有非托管资源的类将实现此方法,并且这些类的使用者将在不再需要该对象时在对象上调用此方法。

© www.soinside.com 2019 - 2024. All rights reserved.