Tag: 工作者线程

如何在不轮询ThreadState的情况下判断线程是否已完成执行?

是否有一种优雅的方式来了解工作线程何时完成执行,以便我可以访问它生成的资源? 例如,如果工作线程使用查询SQL Server列表 ServersSqlDataSourceEnumerator.Instance.GetDataSources(); 并将结果保存在DataTable变量中,我可以使用什么机制来了解此DataTable变量何时已填充/可用。 我不想轮询ThreadState; 当事件完成时触发事件是理想的,这样我就可以对结果执行操作。 谢谢!

有一个无尽的工人线程的正确方法?

我有一个需要大量初始化的对象(在强壮的机器上1-2秒)。 虽然一旦它被初始化,它只需要大约20毫秒来做一个典型的“工作” 为了防止每次应用程序想要使用它(可能是每秒50次或在通常使用中几分钟都没有)时重新初始化它,我决定给它一个工作,并让它运行在它自己的线程上,检查在que中是否有任何工作。 但是,我不完全确定如何创建一个无论是否有工作运行的线程。 这就是我到目前为止,任何批评都受到欢迎 private void DoWork() { while (true) { if (JobQue.Count > 0) { // do work on JobQue.Dequeue() } else { System.Threading.Thread.Sleep(50); } } } 经过深思熟虑:我以为我可能需要优先杀死这个线程让它永远运行,所以我想我会添加一个告诉线程结束的Job类型。 关于如何结束这样的线程的任何想法也赞赏。