处置传递给线程的对象的正确方法是什么?

时间:2018-08-21 11:31:29

标签: c# .net multithreading

给出以下代码:

ThreadWork thrdwrk = new ThreadWork();

Thread t = new Thread(() => thrdwrk.do_work(inc_client));
t.Start();      

什么是正确的过程或最佳实践,以确保调用thrdwrk处理方法? thrdwrk实现了iDisposable。

如果thrdwrk中包含的任何对象都不是线程安全的,这会阻止它或引起问题吗?

在这种情况下,我找不到任何专门说明该过程的文档。

1 个答案:

答案 0 :(得分:0)

为了防止过早处置问题,经验法则是,创建者应丢弃一次性物品。将创建/处置对象的责任分配给两个不同的参与者是违反直觉的。

忘记一秒钟的线程,通常的想法是:

ThreadWork thrdwrk = new ThreadWork();

doSomeThings(thrdwrk);

thrdwrk.Dispose();

在这里最好使用using模式:

using(ThreadWork thrdwrk = new ThreadWork())
{
    doSomeThings(thrdwrk);
}

但是,特定情况下的线程性质使很难确定何时可以实际处置该对象。基于周围的上下文,这是一个更加细微的考虑,您的问题尚不清楚。

理想情况下,您遵守经验法则。 Wait until the thread has finished,那么您就可以安全地处置该对象了。

或者,如果您确信该对象应该由线程处理并且不想实现逻辑来等待线程完成,那么您应该保持一致并让线程 create 也是自己的一次性物品。
在将对象传递给较低范围的范围内创建对象没有任何好处。