C#多线程

时间:2011-05-29 19:31:21

标签: c# multithreading

是否可能,是否有代码示例。关于如何创建单个线程的多个实例。

一个简单的例子就是

Thread foo = new Thread(testThread);

foo.Start(); // but start more than once instance

@Andrew 好吧,当使用Web客户端下载页面时,大约需要0.5秒。当我创建多个执行相同任务的线程时(在不同的函数名下复制和粘贴相同的线程,并使用for循环的全局列表和索引器同时运行它们。使用4个副本线程,它会在大约0.15秒时下载一个页面。

4个线程的速度提高3倍,但我想要一个更干净的解决方案

1 个答案:

答案 0 :(得分:3)

线程实例与线程 logic 不同。因此,您可以使用相同的方法创建多个线程,您不必将代码复制并粘贴到单独的相同方法中:

for( int i=0; i<4; i++ )
    (new Thread(threadProc)).Start();

这是合法的,可以做你需要的 - 但根据评论,如果你确实需要并行性,那么使用ThreadPool或者使用TPL任务会更明智:

for( int i=0; i<4; i++ )
    ThreadPool.QueueUserWorkItem(threadProc);

for( int i=0; i<4; i++ )
    (new Task( threadProc )).Start();

这些变化可以节省创建和销毁单个线程的开销,并可以实现更好的整体利用率。

所有这些方法都有变化,您可以将参数传递给函数,例如变量i或其他信息来划分工作。有关详细信息,请参阅文档,例如http://msdn.microsoft.com/en-us/library/kbf0f1ct.aspx