将Dispose/Close方法编写为异步是不是一个坏主意?

Ans*_*iņš 10 .net dispose asynchronous

而不是在同一个线程上进行清理(或启动后台线程并阻塞直到它完成)在"后台"上启动清理(IsBackground = false,因此它不会过早终止)线程并立即返回.

什么时候这是一个坏主意,多么糟糕?这是一个好主意吗?

Laz*_*rus 5

我认为,与开始后台线程相比,您希望在处理非托管资源时更加努力.如果它是一个使用频繁的过程,你会发现这会产生很大的开销,如果没有其他的话.

如果非托管资源的创建和销毁非常昂贵,那么您可能会考虑在应用程序的生命周期内维护一个公共实例或实例池.


jde*_*aan 4

用异步清理 替换Dispose()from违反了里氏替换原则,因为人们期望资源在调用后立即再次可用。IDisposable

我认为这是由于频繁的分配/释放而需要进行的一些优化,这意味着最终您可能会将问题转移到越来越多的待在后台线程中处理的对象上。这将导致较长时间内内存短缺,并且需要一些同步来确保这些对象的数量不会增长到天上。

正如 Lazarus 所说,更合适的解决方案可能是拥有一个可重用对象池