yit*_*itz 15 c# multithreading using-statement
如果线程在通过退出using块释放的对象中运行方法,会发生什么?
例:
using (SomeObject obj = new SomeObject ())
{
obj.param = 10 ;
Thread newThread = new Thread(() => { obj.Work(); });
newThread.Start();
}
...
obj.Work()正在一个新线程上运行,但是obj是一个IDisposable对象,当using块退出时,它通常会被释放.如果线程在使用块结束后继续运行会发生什么?只有在线程完成后,对象才会被释放吗?或者线程会破裂吗?
谢谢.
Cod*_*Tao 11
有趣的事情会发生.
具体来说,在调用Work之前或之后,将调用SomeObject上的dispose方法,因为它可能已经或可能没有被调度为由该点运行.
之后,它取决于SomeObject的dispose方法的作用; 如果它发布了一个未在"工作"中使用的SqlConnection,那么应该没有问题; 但是,如果SomeObject期望它没有被处理掉,那么你可能会在该线程中抛出一个异常.
请记住,这IDisposable只是一种模式,不会释放与该对象关联的内存。在这种情况下,using块的关闭将被调用obj.Dispose,并且正在使用的另一个线程obj将继续运行。
这会给您带来奇怪的问题,因为obj's状态可能会在另一个线程使用它时发生更改(这完全取决于该Dispose方法的实现方式)。不用说IDisposable,线程和using语句的这种应用充其量也会有问题。
| 归档时间: |
|
| 查看次数: |
2403 次 |
| 最近记录: |