gpt4 book ai didi

c# - 将DataTable异步拆分成多个Datatables

转载 作者:行者123 更新时间:2023-11-30 23:24:48 28 4
gpt4 key购买 nike

关于如何将相当大的数据集批处理成多个分块数据集,有很多答案。

但是,关于如何在分块这些数据集时不锁定 UI 的情况下执行此操作,并没有真正的解决方案。

此解决方案有效,但我应该await async 操作,但我不知道在这段代码中等待什么,所以操作同步执行:

internal static class ExtensionMethods
{
internal static async Task<List<DataTable>> CloneTable(DataTable tableToClone, int countLimit)
{
List<DataTable> tables = new List<DataTable>();
int count = 0;
DataTable copyTable = null;
foreach (DataRow dr in tableToClone.Rows)
{
if ((count++ % countLimit) == 0)
{
copyTable = new DataTable();
copyTable = tableToClone.Clone();
copyTable.TableName = "TableCount" + count;
tables.Add(copyTable);
}
copyTable.ImportRow(dr);
}
return tables;
}
}

如何让它异步执行而不是同步执行?

最佳答案

这个方法好像没有做任何IO操作,目前是同步运行的。因此,我建议您将其切换回普通的同步方法,即使其具有以下签名:

internal static List<DataTable> CloneTable(DataTable tableToClone, int countLimit)

如果您只需要在执行此操作时不占用 UI 线程,那么您需要做的就是在从 UI 事件处理程序调用此方法时使用线程池线程,如下所示:

public async void button1_Click(object sender, EventArgs e)
{
//Execute CloneTable on a thread-pool thread
var tables = await Task.Run(() => ExtensionMethods.CloneTable(table, 4));

//Use the tables here. This code will run on the UI thread
//so you can access any UI elements here
...
}

顺便说一下,CloneTable 目前不是扩展方法,因为您没有在 tableToClone 变量之前使用 this 关键字。

关于c# - 将DataTable异步拆分成多个Datatables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37591810/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com