小编Jef*_*eff的帖子

将数据异步加载到Windows窗体中的DataTable中

我正在修改旧的WinForms/ADO应用程序的数据访问层,以通过异步developerforce rest api使用soql获取Salesforce对象.以下方法通常有效,除了我的十三个表例程之一永远不会从AddMyTableRow(System.Data.DataRowCollection.Add())方法返回:

public void LoadData() {
    var tasks = new List<Task<int>> {
        GetObject1Async(),
        GetObject2Async(),...
        GetObject13Async()
    };
    Task.WaitAll(tasks.ToArray());
    //do some postprocessing now that I have all the data
}

async Task<int> GetObject1Async(){
    var response = await cnx.QueryAsync<dynamic>("SELECT foo FROM bar").ConfigureAwait(false);
    foreach (var rec in response.Records){
        var row = MyDataSet.MyTable.NewMyTableRow();
        row.Name = rec.Name; ...
        MyDataSet.MyTable.AddMyTableRow(row); //<== Sometimes this never returns
    }
    return MyDataSet.MyTable.Count;
}
Run Code Online (Sandbox Code Playgroud)

这甚至是正确的方法吗?

我发现,如果我注释掉整个等待cnx.Query ...行,只需调用AddMyTableRow(dummyData)就行了.我觉得有某种异步/线程/上下文正在发生,但由于它没有产生任何类型的错误或异常,我不知道该怎么做.

干杯,杰夫

c# ado.net asynchronous winforms async-await

1
推荐指数
1
解决办法
3691
查看次数

标签 统计

ado.net ×1

async-await ×1

asynchronous ×1

c# ×1

winforms ×1