Thread应如何通知其父节点它意外结束

时间:2010-11-23 15:09:02

标签: multithreading .net-4.0

我有一个正在侦听套接字的线程,并将收到的消息转发给处理引擎。如果发生了一些不幸事件(例如套接字意外关闭),该线程应该如何通知它的“父”它即将结束?

更新:例如,这是一个简单的问题:

class Program
    {
        private static BlockingCollection<string> queue = new BlockingCollection<string>();
        static void Main(string[] args)
        {
            Thread readingThread = new Thread(new ThreadStart(ReadingProcess));
            readingThread.Start();
            for (string input = queue.Take(); input != "end"; input = queue.Take())
                Console.WriteLine(input);
            Console.WriteLine("Stopped Listening to the queue");
        }
        static void ReadingProcess()
        {
            string capture;
            while ((capture = Console.ReadLine()) != "quit")
                queue.Add(capture);
            // Stop the processing because the reader has stopped.
        }
    }

在这个例子中,当Main看到“end”或者读取过程结束时,Main完成了for循环,因为它看到“quit”。两个线程都被阻塞(一个在ReadLine上,另一个在Take。

按照Martin的建议,ReadingProcess可以添加到BlockingQueue并“结束”---但是队列中的这个毒丸可能还有其他东西,在这个阶段我希望队列立即停止。 / p>

2 个答案:

答案 0 :(得分:1)

不要让父线程负责。停止线程可以自己进行清理等,并在需要时向中央对象(监听器管理器)报告。

答案 1 :(得分:1)

使用相同的机制将请求转发给处理引擎:有一个特殊的“错误请求”,表明线程已被终止。

或者,使用EventWaitHandle,让父线程等待任何孩子发出意外终止信号。