我应该为包含Thread的类实现IDisposable

Nic*_*ick 6 c# multithreading idisposable

我有一个使用Thread类的类:

class A
{
    public Thread thread
    { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我应该实现IDisposable并将Thread属性设置为null吗?

class A : IDisposable
{
    public Thread Thread
    { get; set; }

    protected bool Disposed
    { get; set; }


    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!this.Disposed)
        {
            if (disposing)
            {
                if (Thread != null)
                    Thread = null;
            }

            Disposed = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或不?
为什么?

Lig*_*ker 8

IDisposable仅当您的类处理非托管对象,资源或其他IDisposable对象时才实现.线程不是非托管对象,并且在没有任何引用它时或者处理它的进程终止时将收集垃圾.由于Thread没有实现IDisposable,因此引用它的类也不需要实现它.

(可选)IDisposable在方法范围内,可以将它们包装在using语句中,并在退出范围时自动调用Dispose()方法.

  • @RobertHarvey线程的目的是做一些异步的,所以如果你在包装using语句你的线程,并在它开始你的线程,那么你的线程将立即一旦线程开始布置.也许线程没有完成它会立即处理.所以我不认为在一个using语句中包装一个线程对象 - 即使你可以 - 也不是一个好主意. (4认同)