【发布时间】:2014-01-20 12:19:00
【问题描述】:
今天我决定尝试多任务处理,看看与多线程处理相比我是否获得了性能提升。我特别感兴趣,因为我正在寻找一种简单的方法来返回值并使用 WaitAll 或 WaitAny 等功能。我的问题是我做错了什么,多任务多个实例的最佳方法是什么?
这是我使用线程的旧代码。 (工作中)
Thread[] threads = new Thread[5];
ScrapeFollowersIds[] scrapeClass = new ScrapeFollowersIds[5];
for (int i = 0; i < 5; i++)
{
scrapeClass[i] = new ScrapeFollowersIds();
threads[i] = new Thread(() => scrapeClass[i].ScrapeFollowers(cookie,proxy);
threads[i].Start();
}
这是我的新解决方案。
每个任务都显示状态 = 故障,方法 {null},尚未计算结果 查看异常我得到 Inner Exception: Index was outside the bounds of the Array
Task<string>[] scrapeFollowers = new Task<string>[5];
ScrapeFollowersIds[] scrapeClass = new ScrapeFollowersIds[5];
for (int i = 0; i < 5; i++)
{
scrapeClass[i] = new ScrapeFollowersIds();
scrapeFollowers[i] = Task<string>.Factory.StartNew(() =>
scrapeClass[i].ScrapeFollowers(cookie, proxy);
}
我调用的方法是这样的
try
{
//Dosomething
return someString;
}
catch
{
return "";
}
【问题讨论】:
-
你是closing over the loop variable,一个典型的错误。
-
请阅读多任务与多线程的定义。维基百科是此类主题的整体初学者信息的合理来源。
标签: c# .net multithreading multitasking