var tasks = new List<Task>();
for (int i = 0; i < pageCount; i++)
{
var task = Task.Run(() =>
{
worker.GetHouses(currentPage);
});
tasks.Add(task);
currentPage++;
}
Task.WaitAll(tasks.ToArray());
有些东西我不明白。
每当我使用:
var tasks = new[]
{
Task.Run(() => {worker.GetHouses(1);}),
Task.Run(() => {worker.GetHouses(2);}),
Task.Run(() => {worker.GetHouses(3);})
};
然后我遍历该数组,得到的结果非常好。 (当使用 Task.WaitAll(tasks)
当我使用:
var tasks = new List<Task>();
我的 Task.WaitAll(tasks.toArray())
似乎不起作用,我的任务“Status”停留在“RanToCompletion”
我做错了什么?
最佳答案
currentPage
变量存在同步问题。还创建带有结果的任务。
解决方法:
var tasks = new List<Task<List<House>>>();
for (int i = 0; i < pageCount; i++)
{
var currentPageCopy = currentPage;
var task = Task.Run(() =>
{
return worker.GetHouses(currentPageCopy);
});
tasks.Add(task);
currentPage++;
}
Task.WaitAll(tasks.ToArray());
您的代码的问题在于,所有 GetHouses
调用都将使用 currentPage + pageCount - 1
调用,因为最后一个值将用于所有方法调用...
关于c# - 任务列表 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29021814/