如何解决如何使用同时实现IDisposable和IAsyncDisposable的类型?
我目前正在使用ASP.NET core 3.1和C#8。
这是我第一次接触整个IAsyncDisposable
故事,因此我的理解可能仅仅是局部的,而且这个问题很愚蠢。
根据我的理解,当类型需要以异步方式释放其拥有的资源时,应该实现IAsyncDisposable
接口,以便可以进行所需的处理而不会阻塞线程。换句话说,IAsyncDisposable
是IDisposable
的异步对象,它允许以有效的方式(就线程使用而言)释放类资源。
该语言支持通过新的IAsyncDisposable
结构实现await using
的类型的使用,该结构基本上是using
关键字的异步对应物。
到目前为止一切顺利。
我注意到有些BCL类型同时实现IAsyncDisposable
和IDisposable
,其中之一就是Stream
抽象类。在ASP.NET Core中处理上传的文件并调用IFormFile.OpenReadStream
方法时,我遇到了这种情况。
我现在的问题是:我应该如何使用同时实现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
有什么区别?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。