我有一个互动的另一个用户界面的控制台应用程序。接口发送命令和我的应用程序应该对它们进行处理。重要的是要继续听我的控制台应用程序在处理和有序的执行命令是非常重要的。所以,我听上主线程接口,而在另一个线程中执行命令。
例如下面是什么,我想和问题是执行的线程不排序。
第二件事是我使用锁ProcessCommand方法,但我不知道它安全与否。例如,一个以上的线程可以ProcessCommand方法里面这样之一是过程锁,以便其他线程可以改变传入输入值。我对吗 ?我做了一些测试,并从未发生过,但仍怀疑它。
有什么可以最好的解决办法?解决方案可以线程与否线程。
类节目
{
静态对象更衣室=新的对象();
静态无效的主要(字串[] args)
{
而(真)
{
VAR输入=到Console.ReadLine();
(新主题(新ParameterizedThreadStart(ProcessCommand)))启动(输入)。
}
Console.ReadKey();
}
静态无效ProcessCommand(动态输入)
{
锁(更衣室)
{
Console.WriteLine(输入);
//处理传入的命令
}
}
}
解决方案
您已经开始输入的每行一个新的线程。这就是为什么你不能保证订货。
相反的是,创建一个其中的阅读器可以把线到队列中,处理器可以读出。有一个线程读取和一个线程处理。我有在我的线程教程一些示例code 以生产者/消费者队列,虽然这是非常简单的。
如果您使用的是.NET 4(我猜你是给出了使用动态
),然后并行扩展使得这个的多的容易使用 BlockingCollection< T>
和 IProducerConsumerCollection< T>
。今天是你的幸运日 - 乔阿尔巴哈利取得了href="http://www.albahari.com/threading/part5.aspx" rel="nofollow">并行扩展的C#4的一部分果壳中的