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;
}
}
});
}
TaskFactor.StartNew()를 호출하면 즉시 작업이 시작됩니다. DoGetItemsPrice()에서 서비스 호출을하고 응답을 얻고 있습니다 ... 여기서 어떻게 될 것으로 예상됩니까? – Chris
'WaitAll'이 실행되고 있는지 확실하지 않습니다 –
WaitAll에 디버깅하여 중단 점을 설정했는지 확인 했습니까? 눈에 띄는 대기가 발생하기 전에 작업을 완료하는 것이 가능할 수 있습니다. 또한 예외 처리기에 충돌이 발생하지 않았는지 확인하십시오. – Chris