首页
学习
活动
专区
圈层
工具
发布

等待后
EN

Stack Overflow用户
提问于 2016-08-15 09:22:38
回答 1查看 142关注 0票数 0

在等待电话后,我的前程循环出了问题。purchaseOrders中填充了4个订单,但每次foreach在达到4个迭代之前都会停止。执行停止,它不运行GetInvoices调用。

代码语言:javascript
复制
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");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-15 11:13:03

您使用async void是错误的。相反,返回TaskTask<T>。请考虑以下几点:

代码语言:javascript
复制
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 / catchTask的正确使用应该有助于找出问题所在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38952473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档