/// <summary> /// 构建索引 /// </summary> public void Build() { TableIndexProcessor processor = new TableIndexProcessor(); var taskDataList = processor.GetEachThreadTask(40); TaskFactory taskFactory = new TaskFactory(); taskFactory.StartNew(() => { List <Task> taskList = new List <Task>(); var threadNums = Enumerable.Range(1, StaticConst.CategorySheetCount).ToList(); Random random = new Random(); int index = 0, alltaskCount = taskDataList.Count; foreach (var taskData in taskDataList) { index++; var threadCode = CommodityDAL.GetTName(random.Next(1, threadNums.Count)); Task task = taskFactory.StartNew(() => { try { LuceneBulid luceneBuild = new LuceneBulid(); if (!PathSuffixList.Any(u => u == threadCode)) { PathSuffixList.Add(threadCode); } luceneBuild.BuildIndex(taskData, threadCode, true); } catch (Exception ex) { Console.WriteLine($"BuildIndexError\t{ex.Message}"); StringValueEventArgs e = new StringValueEventArgs() { Value = ex.Message }; OnTaskError(e);//每完成一个任务触发事件 CTS.Cancel(); } }, CTS.Token).ContinueWith(t => { ValueEventArgs e = new ValueEventArgs() { Value = (int)(index * 1.0 / alltaskCount) * 100 }; OnValueChanged(e);//每完成一个任务触发事件 }); taskList.Add(task); if (taskList.Count > 20) { taskList = taskList.Where(t => !t.IsCompleted && !t.IsCanceled && !t.IsFaulted).ToList(); Task.WaitAny(taskList.ToArray()); } } taskList.Add(taskFactory.ContinueWhenAll(taskList.ToArray(), MergeAllLuceneIndex)); }); }
public ErrorCode Create(string companyId, string qty, string premium, string price, string stockId,string commodityId, string pricingType) { try { decimal? quantity = 0; decimal? premiumResult = 0; decimal? priceResult = 0; if (!string.IsNullOrEmpty(qty)) { quantity = Convert.ToDecimal(qty); } if (!string.IsNullOrEmpty(premium)) { premiumResult = Convert.ToDecimal(premium); } if (!string.IsNullOrEmpty(price)) { priceResult = Convert.ToDecimal(price); } var tradeManagement = new SalesOrder { CompanyId = Convert.ToInt32(companyId), Quantity = quantity.Value, StockId = Convert.ToInt32(stockId), Date = DateTime.Now, Premium = premiumResult, Price = priceResult, PricingType = Convert.ToInt32(pricingType), Status = (int)SalesOrderStatus.OrderConfirmed }; var stockDal = new StockDAL(); var stock = stockDal.GetById(Convert.ToInt32(stockId), null); var commDal = new CommodityDAL(); var commodity = commDal.GetById(Convert.ToInt32(commodityId),null); if(quantity > stock.AvailableQty) { return ErrorCode.QtyNotEnough; } if(quantity % stock.BuyUnit != 0) { return ErrorCode.NotInteger; } if(!commodity.IsOpen) { return ErrorCode.CommodityNotOpen; } TradeManagementDal.Create(tradeManagement); stock.AvailableQty = stock.AvailableQty - tradeManagement.Quantity; stockDal.Update(stock); return ErrorCode.NoError; } catch (Exception) { return ErrorCode.ServerError; } }
private void button1_Click(object sender, EventArgs e) { CommodityDAL.InitDb(); long allworkCount = 0; Stopwatch sw = new Stopwatch(); sw.Start(); button1.Enabled = false; Task.Factory.StartNew(() => { List <Task> taskList = new List <Task>(); foreach (var category in categoryList) { Task task = Task.Factory.StartNew(() => { ActInvoker(() => { dataGridView1.Rows[category.Index].Cells["State"].Value = (int)ClawerEnum.TaskState.Doing; dataGridView1.Rows[category.Index].Cells["StateText"].Value = ClawerEnum.TaskState.Doing.GetDescription(); }); for (int i = 1; i <= category.PageCount; i++) { //取值 List <POCO_Commodity> cateList = CommodityAnalysis.GetData(category.Url, category.Id, i); //处理 List <CommodityGroupInput> groupList = cateList.GroupBy(u => Convert.ToInt64(u.SUId) % StaticConst.CategorySheetCount).Select(u => new CommodityGroupInput { Id = u.Key, Units = u.OrderBy(p => p.SUId).ToList() }).ToList(); //入库 _commodityService.InsertGroupBulk(groupList); } }).ContinueWith(t => { allworkCount += category.PageCount; ActInvoker(() => { this.FinishCount.Text = allworkCount.ToString(); this.FinishHour.Text = StopWatchHelper.formatDuring(sw.ElapsedMilliseconds); }); ActInvoker(() => { dataGridView1.Rows[category.Index].Cells["State"].Value = (int)ClawerEnum.TaskState.Finshed; dataGridView1.Rows[category.Index].Cells["StateText"].Value = ClawerEnum.TaskState.Finshed.GetDescription(); }); }); taskList.Add(task); if (taskList.Count > 20) { taskList = taskList.Where(t => !t.IsCompleted && !t.IsCanceled && !t.IsFaulted).ToList(); Task.WaitAny(taskList.ToArray()); } } Task.WhenAll(taskList.ToArray()).ContinueWith(t => { ActInvoker(() => { button1.Enabled = true; FormHelper.Show(true); sw.Reset(); }); }); }); }