.net 多线程

public void Sync()
        {
            _canceling = false;


            var batch  = 100;
            var count  = recipesToSyncIDs.Count();
            var total  = count;
            var parallelList = new List<List<int>>();


            //Syns status to DM
            TotalItemCount = total;


            while (count > 0)
            {
                if (_canceling)
                {
                    return;
                }


                var current = recipesToSyncIDs.Take(batch).ToList();
                if (count < batch)
                    batch = count;
                recipesToSyncIDs.RemoveRange(0, batch);
                count = recipesToSyncIDs.Count();


                parallelList.Add(current.Select(i => i.Key).ToList());
            }


            while (parallelList.Count > 0)
            {
                if (_canceling)
                {
                    return;
                }


                Stopwatch sw = new Stopwatch();
                sw.Start();


                var max = 6;


                if (parallelList.Count < max)
                    max = parallelList.Count;


                var tasks = new Task<List<SyncToMakeModel>>[max];


                for (int i = 0; i < tasks.Length; i++)
                {
                    if (_canceling)
                    {
                        return;
                    }
                    var currentCollection = parallelList[0];
                    tasks[i] = Task.Run(() => CompositeSyncToMakeModel(currentCollection));
                    parallelList.RemoveAt(0);
                }


                Task.WaitAll(tasks);




                var combinedList = new List<SyncToMakeModel>();


                foreach (var task in tasks)
                {
                    combinedList.AddRange(task.Result);
                }
                combinedList = combinedList.GroupBy(i => i.RecipeUrl).Select(i => i.First()).ToList();
                Console.Write("Get:" + sw.ElapsedMilliseconds);
                sw.Restart();
                ProcessRecipe(combinedList);
                total -= combinedList.Count;
                Console.WriteLine("     Set:" + sw.ElapsedMilliseconds + "      Ct:" + combinedList.Count + "       Rm:" + total);
                sw.Reset();


                //Sync status to DM
                CompletedItemCount += combinedList.Count;
                
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值