如何异步使用 DataAdapter.Fill()?

Ree*_*iie 5 .net c# ado.net asynchronous winforms

我有一个 DataAdapter,它在一个数据集中填充 5 个数据表。

SqlDataAdapter da = new SqlDataAdapter("Select * from testTable",con);
da.Fill(ds, 0, numberOfRowsToPutInEachDataTable, "DT1");
da.Fill(ds, numberOfRowsToPutInEachDataTable , numberOfRowsToPutInEachDataTable , "DT2");
da.Fill(ds, numberOfRowsToPutInEachDataTable* 2, numberOfRowsToPutInEachDataTable, "DT3");
da.Fill(ds, numberOfRowsToPutInEachDataTable * 3, numberOfRowsToPutInEachDataTable, "DT4");
da.Fill(ds, numberOfRowsToPutInEachDataTable * 4, numberOfRowsToPutInEachDataTable, "DT5");
Run Code Online (Sandbox Code Playgroud)

我的目标是让每个

da.Fill...
Run Code Online (Sandbox Code Playgroud)

同时异步运行。

我没有异步运行事物的经验,并且很难通过研究找到解决方案。谁能告诉我如何让这些 DataAdapter.Fill() 异步运行?

Mat*_*ero -1

使用PLINQ怎么样:

SqlDataAdapter da = new SqlDataAdapter("Select * from testTable", con);

IEnumerable<int> results = new string[]
{
    "DT1", "DT2", "DT3", "DT4", "DT5"
}
.AsParallel()
.Select((table, index) => da.Fill(ds, 
                          numberOfRowsToPutInEachDataTable * index, 
                          numberOfRowsToPutInEachDataTable, 
                          table));
Run Code Online (Sandbox Code Playgroud)

编辑

绝对不推荐所提出的解决方案。

看来DataSet不支持并发写入操作:

这种类型对于多线程读取操作是安全的。您必须同步所有写入操作