如何解决是否有可能并行调用 DisposeAsync 方法?
从 the official documentation 中获取以下代码:
using System;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;
public class ExampleAsyncdisposable : IAsyncdisposable,Idisposable
{
private Utf8JsonWriter _jsonWriter = new Utf8JsonWriter(new MemoryStream());
public void dispose()
{
dispose(disposing: true);
GC.SuppressFinalize(this);
}
public async ValueTask disposeAsync()
{
await disposeAsyncCore();
dispose(disposing: false);
GC.SuppressFinalize(this);
}
protected virtual void dispose(bool disposing)
{
if (disposing)
{
_jsonWriter?.dispose();
}
_jsonWriter = null;
}
protected virtual async ValueTask disposeAsyncCore()
{
if (_jsonWriter is not null)
{
await _jsonWriter.disposeAsync();
}
_jsonWriter = null;
}
}
问题是:以下场景是否可能?为什么?
解决方法
是的,可以同时进行 prices=['deposit:2000$ \n monthly:500$','deposit:3500$ \n monthly:800$','deposit:2800$ \n monthly:670$',...]
调用。也可以同时进行 deposit=[deposit:2000$,deposit:3000$,deposit:2800$,....]
monthly=[monthly:500$,monthly:800$,monthly:670$,...]
调用。从技术上讲,实现应该正确处理这个问题,但在现实世界的代码中,并发DisposeAsync
或Dispose
调用是非常罕见的,因此大多数实现都没有正确处理这个问题。
如果这是一个令人担忧的问题,我建议使用我的 Disposables 库,该库可确保处理时的精确一次语义。但是,它是根据类型想要实现 Dispose
或 DisposeAsync
而不是两者的假设编写的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。