相关疑难解决方法(0)

我的库是否应该同时实现 IDisposable 和 IAsyncDisposable?

已经有一个类似的问题,但我的问题是关于暴露给客户端的类。

public class MyClass : IAsyncDisposable {
  public ValueTask DisposeAsync() => DoAsyncStuff();
}
Run Code Online (Sandbox Code Playgroud)

此类的处置是异步的,并且 的实现IDisposable会阻塞线程。

public void Dispose() => DisposeAsync().GetAwaiter().GetResult();
Run Code Online (Sandbox Code Playgroud)

如果IDisposable在类上实现并且用户处于同步上下文中,因此他们使用以下using语句:using (var c = new MyClass()) {},这会阻塞用户后面的线程,我认为这非常糟糕。相反,我宁愿不实现IDisposable并强制用户使用这种显式形式:

MyClass c;
try { c = new MyClass(); }
finally { c.DisposeAsync().GetAwaiter().GetResult(); }
Run Code Online (Sandbox Code Playgroud)

这更冗长,但至少用户不会有太大的惊喜。

我没有包含我的库的代码示例,因为这是一个普遍的问题。那么,当该Dispose方法在Task背后同步等待时,您对此有何看法?您是否遇到过问题?

.net c# idisposable

3
推荐指数
1
解决办法
89
查看次数

接口是否进入继承链?

互联网上有两种类型的陈述Interface,即
陈述A.

接口不是继承链.

其他声明B.

接口可以继承其他接口

这两个是相互矛盾的陈述.

请告诉我哪一个是对的?

c# inheritance interface

2
推荐指数
2
解决办法
1325
查看次数

标签 统计

c# ×2

.net ×1

idisposable ×1

inheritance ×1

interface ×1