Я изменяю уровень доступа к данным старого приложения WinForms/ADO, чтобы получить объекты Salesforce с помощью soql над асинхронным остатком developerforce api. Следующий подход обычно не работает, за исключением того, что один из моих тринадцати таблиц подпрограмм не возвращает из() System.Data.DataRowCollection.Add() метод AddMyTableRow:Загрузите данные асинхронно в мой DataTable в Windows Forms
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;
}
Это даже правильный подход?
Я обнаружил, что если я прокомментирую все, ожидайте строку cnx.Query ... и просто вызовите AddMyTableRow (dummyData), это сработает. Я чувствую, что что-то происходит в async/threading/context, но поскольку он не генерирует какую-либо ошибку или исключение, я не знаю, что делать дальше.
Приветствия, Джефф