c# - 任务列表 C#

标签 c# arrays list task

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/

相关文章:

c# - 查找双数组中的最大数

javascript - 重新组合数组中的特定项目

javascript - 全日历 JavaScript 数组

python - 将一个值映射到列表中的另一个值

c# - 将用户详细信息存储在字典中

c# - 如何从多行文本框中获取换行?

使用 Ruby 数组的 SQL 查询 IN

java - 将保存的文件从 List<File> 递归复制到 java 中的目录中

list - Python - 如果元素与另一个元素相似,则从列表中删除该元素

c# - 在 C# 中通过引用传递对象和对象列表