我做了一个简单的示例,该示例从数据库表返回数据。
private Task<DataSet> GetDataAsync(string connStr)
{
return Task.Run(() =>
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using(SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE", conn))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(ds);
}
}
}
return ds;
});
}
如果将方法标记为 async 而不是 return Task.Run ,我会使用 Return await Task.Run有什么区别? ?
答案 0 :(得分:1)
简短的回答是“是”和“是”。
您可以使用不带await
和async
的Task.Run。显然。这就是您的代码当前的编写方式和工作方式。
如果将方法标记为async
,则必须使用return await Task.Run
。
现在,在这种情况下,它没有任何实际价值,因为您只是立即返回Task.Run
的结果。代码调用者可以根据您的方法结果独立决定是否使用await
。
只有在您的代码在整个方法中都使用await
时,它才会起作用。例如,如果有一个FillAsync
方法,那么此代码将有效:
private async Task<DataSet> GetData2Async(string connStr)
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE", conn))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
await da.FillAsync(ds);
}
}
}
return ds;
}
请注意,await da.FillAsync(ds);
是虚构的,仅供说明。
在这段代码中,您需要在方法上使用async
来await
FillAsync
。