2013-03-13 2 views
0

I 아래의 방법으로 여러 작업을 만들었습니다. 하지만 WaitAll이 작동하지 않는 것 같습니다. 기다리지 않고 응답을 보냅니다. 여기 뭐가 잘못 됐어?작업이 작동하지 않는 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; 
       } 
      } 
     }); 
    } 
+0

TaskFactor.StartNew()를 호출하면 즉시 작업이 시작됩니다. DoGetItemsPrice()에서 서비스 호출을하고 응답을 얻고 있습니다 ... 여기서 어떻게 될 것으로 예상됩니까? – Chris

+0

'WaitAll'이 실행되고 있는지 확실하지 않습니다 –

+0

WaitAll에 디버깅하여 중단 점을 설정했는지 확인 했습니까? 눈에 띄는 대기가 발생하기 전에 작업을 완료하는 것이 가능할 수 있습니다. 또한 예외 처리기에 충돌이 발생하지 않았는지 확인하십시오. – Chris

답변

0

내 질문에는 아무런 문제가 없습니다. WaitAll이 잘 작동하고 코드도 정확합니다.

관련 문제