将同步数据访问方法转换为异步的正确方法

时间:2018-07-10 09:55:27

标签: c# async-await

我目前正在研究一个Web api项目,我们正在使用存储库模式,但不幸的是我们没有使用EF。

因此对于数据访问层,我们使用ADO.NET,在其中调用数据库上的存储过程。 我知道架构不好。

无论如何,我最近发现的问题(由于我在其他层上工作)是,即使所有层都是通过使用任务来实现的,而数据访问层却不是,并且如果我没有记错,异步方法调用链中有一个同步方法调用,它将整个过程变成同步的。

所以最初我有类似这样的方法:

function generateSnapshot() {
   var video = document.querySelector('#camera-stream');
   var hidden_canvas = document.querySelector('#canvas');
   var context = hidden_canvas.getContext('2d');

   var width = video.videoWidth;
   var height = video.videoHeight;

   if (width && height) {
       hidden_canvas.width = width;
       hidden_canvas.height = height;

       // Make a copy of the current frame in the video on the canvas.
       context.drawImage(video, 0, 0, width, height);

       // Turn the canvas image into a dataURL that can be used as a src for our photo.
       return hidden_canvas.toDataURL('image/png');
   }
}

因此,在进行一些搜索之后,我将方法和类通常更改为类似的

  public DataTable GetClients()
  {
    using (var conn = new SqlConnection(CMS))
    {
        using (var cmd = new SqlCommand("[dbo].[ClientsReturn]"))
        {
            cmd.Connection = conn;
            cmd.CommandType = CommandType.StoredProcedure;

            conn.Open();
            var adapter = new SqlDataAdapter(cmd);

            var ds = new DataSet();
            adapter.Fill(ds);

            var T = ds.Tables[0];

            return T;
        }
    }
}

这对您来说合适吗?有什么建议吗?

谢谢。

0 个答案:

没有答案