0

我目前正在使用 ASP.NET core 3.1 和 C# 8。

这是我第一次接触整个IAsyncDisposable故事,所以完全有可能我的理解只是片面的,这个问题是愚蠢的。

根据我的理解,IAsyncDisposable当需要以异步方式释放它拥有的资源时,类型应该实现接口,以便可以在不阻塞线程的情况下进行所需的处理。换句话说,IAsyncDisposable它的异步对应物IDisposable允许以有效的方式释放类资源(就线程使用而言)。

该语言支持使用IAsyncDisposable通过 newawait using构造实现的类型,这基本上是using关键字的异步对应物。

到目前为止,一切都很好。

我注意到有一些 BCL 类型同时实现了IAsyncDisposableIDisposable,其中之一是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实现它们的类型有什么区别?

4

0 回答 0