我在 .NET Core 2.0 应用程序中有以下功能。
public DataTable CallDb(string connStr, string sql)
{
var dt = new DataTable();
var da = new SqlDataAdapter(sql, connStr);
da.Fill(dt);
return dt;
}
如何将其转换为异步函数?
public async Task<DataTable> CallDb(string connStr, string sql)
{
var dt = new DataTable();
var da = new SqlDataAdapter(sql, connStr);
da.Fill(dt); // No FillAsync to await?
return dt;
}
我需要使用DataTable
因为sql可能会返回具有不同模式的数据。有更好的方法来处理动态模式吗?
SqlDataAdapter
从未更新以包含方法的 TPL 版本。你可以这样做:
await Task.Run(() => da.Fill(dt));
但这将创建一个没有任何用处的线程。
一个好的方法是使用这样的东西:
public async Task<DataTable> CallDb(string connStr, string sql)
{
var dt = new DataTable();
var connection = new SqlConnection(connStr);
var reader = await connection.CreateCommand().ExecuteReaderAsync();
dt.Load(reader);
return dt;
}
当然,也有一些改变,比如using
应作出陈述。但是,您在这里以正确的方式使用异步调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)