我目前正在使用 ASP.NET core 3.1 和 C# 8。
这是我第一次接触整个IAsyncDisposable
故事,所以完全有可能我的理解只是片面的,这个问题是愚蠢的。
根据我的理解,IAsyncDisposable
当需要以异步方式释放它拥有的资源时,类型应该实现接口,以便可以在不阻塞线程的情况下进行所需的处理。换句话说,IAsyncDisposable
它的异步对应物IDisposable
允许以有效的方式释放类资源(就线程使用而言)。
该语言支持使用IAsyncDisposable
通过 newawait using
构造实现的类型,这基本上是using
关键字的异步对应物。
到目前为止,一切都很好。
我注意到有一些 BCL 类型同时实现了IAsyncDisposable
和IDisposable
,其中之一是Stream
抽象类。IFormFile.OpenReadStream
我在处理 ASP.NET 核心中上传的文件并调用该方法时遇到了这种情况。
我现在的问题是:我应该如何使用实现IAsyncDisposable
和的类型IDisposable
?我应该使用经典using
关键字还是应该选择await using
?
我写的这段代码是同步的,所以处理流的最自然的方法如下:
using var readStream = uploadedFile.OpenReadStream();
var options = new LoadOptions(loadFormat);
return new Workbook(readStream, options);
我应该制作我的方法async
以便能够以await using
下列方式使用吗?
await using var readStream = uploadedFile.OpenReadStream();
var options = new LoadOptions(loadFormat);
return new Workbook(readStream, options);
(考虑到,除了await using
调用,我的方法不需要是异步的)
Dispose
调用与DisposeAsync
实现它们的类型有什么区别?