0

以下の方法でいくつかのタスクを作成しました。しかし、それは機能しWaitAllていないようです。待たずに応答を送信しています。ここで何か問題がありますか?

private void GetItemsPrice(IEnumerable<Item> items, int customerNumber)
    {
        try
        {
            var tasks = new List<Task>();

            for (var i = 0; i < items.Count(); i += 50)
            {
                var newTask = DoGetItemsPrice(items.Skip(i).Take(50), customerNumber);    
                tasks.Add(newTask);
            }

            Task.WaitAll(tasks.ToArray());
        }
        catch (Exception ex)
        {
            ErrorLog.WriteLog(GetType().Name, "GetItemsPrice", string.Format("customerNumber={0}", customerNumber), ex.Message);
        }
    }

private static Task DoGetItemsPrice(IEnumerable<Item> items, int customerNumber)
    {
        return Task.Factory.StartNew(() =>
        {
            var sxApiObj = new SxApiService();
            var request = new OEPricingMultipleRequest();

            request.customerNumber = customerNumber;
            request.arrayProduct =
                items.Select(
                    itemCode =>
                    new OEPricingMultipleinputProduct
                    {
                        productCode = itemCode.ItmNum,
                        quantity = itemCode.Quantity,
                        warehouse = ConfigurationVariables.DefaultWareHouse
                    }).ToArray();
            var response = sxApiObj.OEPricingMultiple(ConfigurationVariables.SfAppServer,
                                                  ConfigurationVariables.SfUserId,
                                                  ConfigurationVariables.SfPassword,
                                                  request);

            if (response.arrayPrice != null)
            {
                foreach (var priceData in response.arrayPrice)
                {
                    var productCode = priceData.productCode;
                    var item = items.FirstOrDefault(itm => itm.ItmNum == productCode);

                    if (item == null) continue;
                    item.ItmListPrice1 = priceData.price.ToString("c", ConfigurationVariables.UsCulture);
                    item.ItmListPrice2 = priceData.discountAmount.ToString("c", ConfigurationVariables.UsCulture);
                    item.ItmListPrice3 = priceData.extendedAmount.ToString("c", ConfigurationVariables.UsCulture);

                    item.Quantity = priceData.netAvailable;
                }
            }
        });
    }
4

1 に答える 1

0

私の質問には何の問題もありません。WaitAll正常に動作し、コードも正しいです。

于 2013-03-14T04:24:30.587 に答える