在等待电话后,我的前程循环出了问题。purchaseOrders中填充了4个订单,但每次foreach在达到4个迭代之前都会停止。执行停止,它不运行GetInvoices调用。
GetPurchaseOrders("50000");
GetInvoices("10000");
static async void GetPurchaseOrders(string supplier)
{
var purchaseOrders = await VNA.PurchaseOrders.ForSupplierAsyncTask(supplier);
foreach (var order in purchaseOrders)
{
CreateXMLDocument(order, order.orderNbr, "PurchaseOrder");
}
}发布于 2016-08-15 11:13:03
您使用async void是错误的。相反,返回Task或Task<T>。请考虑以下几点:
static async Task GetPurchaseOrders(string supplier)
{
try
{
var purchaseOrders = await VNA.PurchaseOrders.ForSupplierAsyncTask(supplier);
foreach (var order in purchaseOrders)
{
CreateXMLDocument(order, order.orderNbr, "PurchaseOrder");
}
}
catch (Exception ex)
{ // <-- Place a breakpoint here...
// I would imagine you're getting an exception
}
}Task (作为返回类型)是底层异步状态机如何理解状态之间的相关性的。此外,它还允许正确的异常处理。
您可能在数据库连接上使用IEnumerable<T>,而且由于它是延迟执行加上挂起的异步执行,所以在尝试迭代之前或期间可能会关闭连接。try / catch和Task的正确使用应该有助于找出问题所在。
https://stackoverflow.com/questions/38952473
复制相似问题