首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多线程列表AddRange

多线程列表AddRange
EN

Stack Overflow用户
提问于 2016-04-27 15:16:47
回答 1查看 407关注 0票数 0

问题是TotalRows大约是71800,其中workList只返回718,这只是任务的第一个结果。我在那里有WaitAll,但它似乎一完成第一项任务就完成了。

代码语言:javascript
运行
复制
TotalRows = GetRowCount();
        var lastRecord = 0;
        List<tmpWBITEMALL> workList = new List<tmpWBITEMALL>();
        for (int i = 0; i < 100; i++)
        {
            var tmpI = i;
            gatherTmpTasks.Add(Task.Factory.StartNew(() =>
            {
                var context = new AS400_PIM5ContextDataContext();
                context.CommandTimeout = 0;
                int amount = (TotalRows / 100);
                int tmplastRecord = lastRecord;
                Interlocked.Add(ref lastRecord, amount); 
                Console.WriteLine("Getting rows " + tmplastRecord+ " to " +  (tmplastRecord + amount));
                var pagedResult = context.ExecuteQuery<tmpWBITEMALL>("SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY Id ) AS RowNum, * from tmpWBITEMALL) AS RowConstrainedResult WHERE   RowNum >= " + tmplastRecord+ " AND RowNum < " + amount + " ORDER BY RowNum");
                lock (listLock)
                    workList.AddRange(pagedResult);
                context.Dispose();
            })); 
        }
        Task.WaitAll(gatherTmpTasks.ToArray());
        Console.WriteLine("total work: " + workList.Count + " tasks: " + gatherTmpTasks.Count); 

因此,作为参考,gatherTmpTasks.Count返回100,但workList.Count仅为718,因为listLock只是一个静态的新对象()。如果没有注意到我正在使用LINQ

有人知道为什么我的列表不和TotalRows一样大吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-06 13:03:54

“和RowNum <”+ tmplastRecord : tmplastRecord总是718,所以您要求查询总是在tmplastRecord和718之间返回东西,而不是在tmplastRecord和tmplastRecord+tmplastRecord之间返回。我认为您只需更改为“和RowNum <”+ (tmplastRecord + amount)

智者

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36894008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档