.net 多线程从哪里开始?

.net 多线程从哪里开始?,.net,multithreading,.net,Multithreading,我一直在做一些关于多线程的研究,发现有很多不同的方法 线程、任务、线程池等 我正在使用.net4并制作一个简单的windows应用程序,它基本上有一个与网页交互的方法。我需要做的是非常基本的: 单击后,同时运行方法A,X次(要指定X次 由我负责,可能会有所不同) 我很困惑,我应该进一步研究哪种多任务处理方法来实现这一点,我不想开始学习很多不同的方法,这些方法目前还不能满足我的需要 抱歉,如果这不符合SO的精神,我真的很想潜入,让我的手脏多线程,我只是不知道从哪里开始!感谢您使用.NET4,一

我一直在做一些关于多线程的研究,发现有很多不同的方法

线程、任务、线程池等

我正在使用.net4并制作一个简单的windows应用程序,它基本上有一个与网页交互的方法。我需要做的是非常基本的:

  • 单击后,同时运行方法A,X次(要指定X次 由我负责,可能会有所不同)
我很困惑,我应该进一步研究哪种多任务处理方法来实现这一点,我不想开始学习很多不同的方法,这些方法目前还不能满足我的需要


抱歉,如果这不符合SO的精神,我真的很想潜入,让我的手脏多线程,我只是不知道从哪里开始!感谢您使用.NET4,一个很好的起点是。
ThreadPool
和TPL实际上是相同的,但TPL使异常处理/取消等操作变得更容易


除非您真的必须创建专用线程,否则我将避免创建专用线程。

当您使用.NET4时,一个很好的起点是。
ThreadPool
和TPL实际上是相同的,但TPL使异常处理/取消等操作变得更容易


除非你真的必须这样做,否则我会避免创建专用线程。

我不同意詹姆斯的观点,如果你想要尽可能简单和快速的结果(就开发时间而言),我会根据需要创建尽可能多的线程(例如
System.Thread
类并将方法设置为execute)并执行所请求的方法

这是一个快速而肮脏的解决方案,需要更少的开发工作


否则,如果你想让事情以正确的方式完成,那么TPL是一条可行的道路,rigth,但不知何故,我从你的问题中感觉到,你试图快速完成一些简单的事情。

我不同意James的观点,如果你想要尽可能简单和快速的结果(就开发时间而言),我会创建尽可能多的线程(根据需要实例化
System.Thread
类并设置要执行的方法)并执行请求的方法

这是一个快速而肮脏的解决方案,需要更少的开发工作


否则,如果你想让事情以正确的方式完成,那么TPL是一个不错的选择,对吧,但不知怎么的,我从你的问题中感觉到,你试图快速完成一些简单的事情。

对于堆栈溢出来说,这是一个太宽泛的问题。你可能想等到你遇到需要它的问题时再去做。如果你想要一本关于多线程的好书d所有的方面,那么你应该买Joe Duffy的。这里有一本优秀的(免费的)初学者电子书:对于堆栈溢出来说,这是一个太宽泛的问题。你可能想等到你有一个需要它的问题。如果你想要一本关于多线程及其所有方面的好书,那么你应该买Joe Duffy的。这里有一本优秀的(免费的)初学者电子书:这是一个糟糕的建议。对于正在寻找的人来说,学习多线程(即使是专家也可能很棘手)告诉他们从深层跳进去不是一个好办法。无论如何,通过ThreadPool/TPL生成任务/线程要比管理专用线程容易得多。很抱歉,我不同意。thread t=new thread(MethodToCall);t.Start();没有比这更简单的了。在我看来,他是在寻找问题的解决方案,而不是试图学习整个多线程模型。Task。Factory。StartNew(…)或ThreadPool。QueueUserWorkItem(…)同样易于编写,无需创建新线程的额外开销!显然,OP需要更具体地说明他希望线程执行的作业类型。但是,我始终建议在创建新线程之前使用.NET线程池。With ThreadPool.QueueUserWorkItem(…)您必须检查工作项是否已成功排队,并在失败时重试(如果线程池的空闲线程用完,则调用将返回false),不确定TPL的工作方式。“您必须检查工作项是否已成功排队,并在失败时重试”-发生这种情况的可能性微乎其微。“如果线程池没有可用线程,调用将返回false“-当您调用
QueueUserWorkItem
时,操作将一直排队,直到线程可用,因此如果没有可用线程,它不会失败-这就是排队的意义…只有由于某种原因无法将操作排队时,它才会失败。这是一个糟糕的建议。对于正在寻找多线程的人来说,请学习多线程(这对专家来说可能很棘手)告诉他们从深层次开始并不是一个好办法。无论如何,通过ThreadPool/TPL生成任务/线程要比管理专用线程容易得多。很抱歉,我不同意。thread t=新线程(MethodToCall);t.Start();没有比这更简单的了。在我看来,他是在寻找问题的解决方案,而不是试图学习整个多线程模型。Task。Factory。StartNew(…)或ThreadPool。QueueUserWorkItem(…)同样易于编写,无需创建新线程的额外开销!显然,OP需要更具体地说明他希望线程执行的作业类型。但是,我始终建议在创建新线程之前使用.NET线程池。With ThreadPool.QueueUserWorkItem(…)您必须检查工作项是否已成功排队,并在失败时重试(如果线程池的空闲线程用完,则调用将返回false),不确定TPL的工作方式。“您必须检查工作项是否已成功排队,并在失败时重试”-发生这种情况的可能性微乎其微。“如果线程池没有可用线程,则调用将返回false”-当您调用
QueueUserWorkItem
时,操作将排队,直到线程可用为止,因此如果