C# 异步数据表调用
这是我到目前为止所拥有的C# 异步数据表调用,c#,asynchronous,async-await,task,C#,Asynchronous,Async Await,Task,这是我到目前为止所拥有的FillDataTable()工作正常,但我遇到了问题,因为我有同步代码和大量背靠背调用。其中许多已准备好在继续进行的一项完成之前运行。正在尝试将其转换为async/await。我从我看到的其他示例中复制了FillAsync(),所以它可能是Franken代码 public static DataTable FillDataTable(string sql, Database _db) { using (OleDbConnection conn =
FillDataTable()
工作正常,但我遇到了问题,因为我有同步代码和大量背靠背调用。其中许多已准备好在继续进行的一项完成之前运行。正在尝试将其转换为async/await
。我从我看到的其他示例中复制了FillAsync()
,所以它可能是Franken代码
public static DataTable FillDataTable(string sql, Database _db) {
using (OleDbConnection conn = NewConnectionFromGivenDB(_db)) {
conn.Open();
using (OleDbCommand comm = new OleDbCommand(sql, conn)) {
using (OleDbDataAdapter da = new OleDbDataAdapter(comm)) {
using (DataTable dt = new DataTable()) {
da.Fill(dt);
}
conn.Close();
return dt;
}
}
}
}
public static async Task<DataTable> FillAsync(string sql, Database _db) {
return await Task.Run(() => { return FillDataTable(sql, _db); });
}
有人能看出哪里出了问题或给我一些更好的建议吗?您正在调用
Result
或Wait
,以执行此处未显示的代码中的某些任务。这会导致经典的ASP.NET(或WinForms/WPF)死锁。使用wait for all wait
其中许多已准备好在继续进行的一项完成之前运行
你是不是想把事情并行处理?你的代码不能做到这一点。等待不启动任务;它等待已经运行的任务。它结束了并行性。您正在调用
Result
或Wait
来执行此处未显示的代码中的某些任务。这会导致经典的ASP.NET(或WinForms/WPF)死锁。使用wait for all wait
其中许多已准备好在继续进行的一项完成之前运行
你是不是想把事情并行处理?你的代码不能做到这一点。等待不启动任务;它等待已经运行的任务。它结束并行性。在什么上下文中运行应用程序?WPF/ASP.NET/Forms,诸如此类?@Caramiriel应用程序都是WPFIn您运行应用程序的上下文是什么?WPF/ASP.NET/Forms,诸如此类?@Caramiriel应用程序都是wpfy你是对的,但我很困惑为什么。。。上面的调用使用的是.Result()。您是对的,但理解为什么。。。上面的调用使用的是.Result()。
DataTable dt = await FillAsync(sql, Database.Oracle);