可能重复:
任务和线程有什么区别?
我知道标题本身可能看起来是一个重复的问题,但我真的阅读了与该主题相关的所有先前帖子,但仍然不太了解程序行为。
我目前正在编写一个检查大约 1,000 个电子邮件帐户的小程序。毫无疑问,我觉得多线程或多任务处理是正确的方法,因为每个线程/任务的计算成本并不高,但每个线程的持续时间很大程度上依赖于网络 I/O。
我认为在这种情况下,将线程/任务的数量设置为远大于核心数量的数量也是合理的。(i5-750 四个)。因此,我将线程或任务的数量设置为 100。
使用 Tasks 编写的代码片段:
const int taskCount = 100;
var tasks = new Task[taskCount];
var loopVal = (int) Math.Ceiling(1.0*EmailAddress.Count/taskCount);
for (int i = 0; i < taskCount; i++)
{
var objContainer = new AutoCheck(i*loopVal, i*loopVal + loopVal);
tasks[i] = new Task(objContainer.CheckMail);
tasks[i].Start();
}
Task.WaitAll(tasks);
使用 Threads 编写的相同代码片段:
const int threadCount = 100;
var threads = new Thread[threadCount];
var loopVal = (int)Math.Ceiling(1.0 * EmailAddress.Count / threadCount);
for (int i = 0; i < threadCount; i++)
{
var objContainer = new AutoCheck(i * loopVal, i * loopVal + loopVal);
threads[i] = new Thread(objContainer.CheckMail);
threads[i].Start();
}
foreach (Thread t in threads)
t.Join();
runningTime.Stop();
Console.WriteLine(runningTime.Elapsed);
那么这两者的本质区别是什么?