古いWinForms/ADOアプリケーションのデータアクセスレイヤーを変更して、非同期の開発環境の残りのAPIを使用してSalesforceオブジェクトをsoqlで取得します。次のアプローチは、一般的に決して私の13件のテーブル・ルーチンの1つを除いて、機能していないAddMyTableRow(System.Data.DataRowCollection.Add())メソッドから返されます。WindowsフォームのDataTableにデータを非同期でロードする
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)を呼び出すことがわかりました。どのような種類の非同期/スレッディング/コンテキストがあるように感じますが、何のエラーも例外も発生しないので、何を実行するのか分かりません。
乾杯、 ジェフ