下面的方法用于填充数据集。
如果我们以同步方式调用这个方法,它就可以正常工作。
但现在我们需要以异步方式调用这个方法。那么我需要做哪些更改才能使下面的方法正常工作而不会出现任何问题。
public DataSet Filldata(string ProcName, string TableName)
{
DataSet ds = new DataSet();
try
{
da = new SqlDataAdapter(ProcName, con);
if (con.State != ConnectionState.Open)
{
con.Open();
}
da.SelectCommand.CommandTimeout = 15000;
da.Fill(ds, TableName);
}
catch (Exception ex)
{
ErrorMsg = ex.Message.ToString();
HMISLogger.logger.Error(ex.Message.ToString() + " " + ProcName, ex);
}
finally
{
con.Close();
da.Dispose();
}
return ds;
}
你可以这样做:
DataSet ds = await Task.Run(() => FillData(spName, tableName));
但该语句必须位于某个异步函数内,即:
public async Task<DataSet> GetDataSetAsync() {
.....
}
所以最终结果看起来像这样:
public async Task<DataSet> GetDataSetAsync() {
DataSet ds = await Task.Run(() => FillData(spName, tableName));
return ds;
}
这就是包装器,它只为您提供想法。但你可能不应该这样做。我会将 Task.Run 放在调用 SqlDataAdapter .Fill 的最低级别中
这在 .NetFrameWork WebAPI 中不起作用,但只要您引用 NuGet 包 System.Data.SqlClient 4.6.0,它就可以在 .Net Core WebAPI 和 Core 或常规 .Net Console 程序中工作。在.Net Framework WebAPI(非核心)中,await似乎在不同的线程中返回DataSet,因为进程在await语句处消失了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)