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);