我有一个自定义集合(线程安全的 ObservableQueue)。我在集合类中实现了业务逻辑(即将项目逐一出列并将它们暴露给外部)。这工作正常。为了防止集合阻塞初始化它的线程, OnservableQueue 实现了一个线程来执行该工作。现在我不能完全确定可能发生的任何陷阱。
在构造函数中初始化(而不是开始!仅初始化)线程是一个坏主意吗?如果不是最好的,终止线程的最佳实践是什么?请注意,我不需要知道如何终止线程,它工作正常,我对天气很感兴趣,使用一次性模式或创建需要调用以终止线程的方法有问题。如果实施IDisposable
,关于收集/队列有什么我必须考虑的事情吗?
编辑:线程实际上只是预先初始化,以防止NullReferenceException
被抛出入队方法,在那里它再次被正确初始化(入队方法应该检查天气一个出队线程是否已经运行,如果不开始一个新的) . 请注意,每当所有项目都出队并且线程完成其工作时,它也将不再处于活动状态,因此每当队列为空并添加新项目时,都会启动一个新线程来处理队列:
if (!_dequeuingThread.IsAlive)
{
// start the dequeuing thread
_dequeuingThread = new Thread(new ThreadStart(StartDequeuing));
_dequeuingThread.Name = "DeQueueThread";
_dequeuingThread.Start();
}
if 语句确实需要一个初始化的线程。还有其他可能的方法来实现这一点,但预初始化线程似乎最不麻烦。您会看到,在检查天气后线程是活动的,在预初始化时它不应该这样做,它会再次正确初始化。