我正在开发一个.NET项目,它需要与一些用户定义的类进行交互 - 被改为“作业”。所有工作类别必须实现特定的接口IJob
,以便库消耗它们。有时候一个工作类可能拥有非托管资源,这需要明确处理。我应该如何确保处理可能的一次性物品?
我应该如何确保所有工作在使用后妥善处理,如果我事先不知道工作是否需要明确处置?我有几个想法我自己,而是想听听您的意见/建议:
让
IJob : IDisposable
,迫使所有的工作来实现Dispose()
方法。这将允许我在using
块中处理工作,但由于大多数工作是而不是预计需要明确处置,这可能会增加客户开发人员不必要的困惑。是否涉及作业的所有工作
try-finally
块,并用finally
,以确保如果作业实现IDisposable
是Dispose()
被调用。这使得客户更容易实施新的工作职位 - 不必实施空的方法 - 但它也隐藏了图书馆知道并关心一次性工作的事实。
写这篇后,我趋向于向解决方案#1瘦,但我仍然认为这将是很好看的替代解决方案,以及额外的优点/缺点两个我心中已经有了。
好点。但是,大部分流都需要处理,我希望只有少数工作需要处理。 – 2009-12-29 17:51:25
在我看来'System.Web.IHttpModule'也需要它的实现者提供'Dispose()'方法,尽管只有少数模块(恕我直言)需要它。我想这为#1提供了额外的优先权。 – 2009-12-29 17:54:50
+1,我认为,为Job提供一个标准化的方法来清理它使用的是合理的。通过使用'IDisposable',您可以从框架支持中受益,并且最终用户至少可以考虑在何处放置适当的清理代码。 – user7116 2009-12-29 18:00:14