处置线程不安全的本机资源

时间:2018-08-19 14:38:06

标签: c# thread-safety dispose

在我开始解释之前,我会提到我无法在Google上找到与我的问题相关的任何帖子,因此这不是重复的帖子。

好的,所以我的问题是:

我正在为本地API 创建包装器,该资源具有线程不安全的资源,我需要在处理这些资源时该对象不再使用。 通常,您为此创建一个Dispose方法,在此处释放非托管资源,但是如果未调用它,则将其释放吗?好...通常发生的是 finalizer(析构函数)为您调用Dispose方法,这就是我的问题!终结器在与创建本机资源不同的线程上执行!这会导致API返回错误代码,从而保持本地资源不变!那我该怎么办?

我解决问题的想法:

我认为我能做的就是像平常一样创建Dispose方法并在那里处置本机资源,但是在调用Dispose方法时,请检查是否从正确的线程中调用了它,否则抛出异常!

如果未调用Dispose方法并且超出范围,则在析构函数中抛出异常,导致C#应用程序崩溃,并在发生异常时说明原因

那我该怎么办?最好的选择是什么?通常,垃圾收集器会解决这个问题,但是在这种情况下不会。

0 个答案:

没有答案