C# 在c中使普通方法异步#

C# 在c中使普通方法异步#,c#,asynchronous,C#,Asynchronous,我在c#中有一个方法: 现在我想将它作为一个异步方法,这样我就可以通过wait调用它。所以我把它改成: public async Task<DataSet> OpenSqlQuery(string SqlQuery) { con = new SqlConnection(connection_string); con.Open(); var sqlc = new SqlCommand(SqlQuery, con); da = new SqlDataAda

我在c#中有一个方法:

现在我想将它作为一个异步方法,这样我就可以通过
wait
调用它。所以我把它改成:

public async Task<DataSet> OpenSqlQuery(string SqlQuery)
{
    con = new SqlConnection(connection_string);
    con.Open();
    var sqlc = new SqlCommand(SqlQuery, con);
    da = new SqlDataAdapter(sqlc);
    var ds = new DataSet();
    await da.Fill(ds);
    con.Close();
    return ds;
}

注:这个问题和可能重复的问题的区别在于,这篇文章是关于将现有的同步方法变为异步的,而另一篇是关于创建异步方法的。

可能重复的查看
任务
类,f.e.作为旁注:您应该使用
using
-语句在完成连接后立即处理它。我不会将其存储在类的字段中。Fill不会被同步调用吗?为什么不使用SqlDataReader并访问Reader.ReadAsync和SqlCommand.ExecuteReaderAsync?然后您就可以正确地进行异步了。还应该注意,这种方法通常代表一种反模式。您正在强制调用方仅在字符串查询中工作,因此禁止使用任何参数,如果遇到SQL注入攻击,则打开自己的窗口。
public async Task<DataSet> OpenSqlQuery(string SqlQuery)
{
    con = new SqlConnection(connection_string);
    con.Open();
    var sqlc = new SqlCommand(SqlQuery, con);
    da = new SqlDataAdapter(sqlc);
    var ds = new DataSet();
    await da.Fill(ds);
    con.Close();
    return ds;
}
Dataset ds = await objConnect.OpenSqlQuery(query);