我正在使用blob和队列存储,redis chache,documentdb和azure sql数据库以及创建CloudStorageAccount,客户端和容器对象。这些类是否实现了IDisposable。我是否必须使用“使用”或尝试finally块来释放对象/将其设置为null?
不幸的是,这不是一个直接的答案。有些人实施IDisposable
,有些则没有。在一般的.net实践中,你应该总是处理一次性对象,或者使用使用模式。无论您是编写Azure函数,WebApp还是控制台应用程序等,都无需将对象设置为null,只需进行处理即可。只有未受管理的对象需要被“取消”,这将在调用的Dispose()
方法中完成。 See the IDisposable pattern。
然而,事情并非如此直截了当。例如,CosmosDB连接实现IDisposable
但是建议创建一个单独的实例/单例以用于您的应用程序,因为客户端是线程安全的,并且多个客户端实例可能导致多线程实现中的线程耗尽,因此您不希望每个use包含在using子句中。处置变得不那么重要了,因为对象的生命周期与App域的生命周期相同(或接近)。
因此,经常处理经验法则,然后检查文档以获得最佳实践,尤其是在连接对象时。
@ McGuireV10在评论中提出了一个很好的观点和建议。您需要注意,函数的许多实例可以在托管应用程序域的同一实例中执行。每个函数都是一个实例,而不是一个新的应用程序域(随着函数的扩展/移动/改变运行状况而定期发生)