为了账号安全,请及时绑定邮箱和手机立即绑定

C# 存储过程中await关键字放在哪里

C# 存储过程中await关键字放在哪里

C#
呼唤远方 2023-06-25 13:43:35
我想实现一个async功能。我的问题是;我不知道在下面的代码中将await关键字放在哪里:public async Task<List<ManualReadTag>> GetManuallyReadTags(ParameterManualTags model){    var db = new ApplicationDbContext();    using (var cnxn = db.Database.Connection)    {        cnxn.Open();        var cmd = cnxn.CreateCommand();        cmd.CommandText = "GetManualReadForDedicated";        cmd.CommandType = CommandType.StoredProcedure;        var dtFrom = cmd.CreateParameter();        dtFrom.ParameterName = "@DateFrom";        dtFrom.DbType = DbType.Date;        dtFrom.Direction = ParameterDirection.Input;        dtFrom.Value = model.DateFrom;        var dTo = cmd.CreateParameter();        dTo.ParameterName = "@DateTo";        dTo.DbType = DbType.Date;        dTo.Direction = ParameterDirection.Input;        dTo.Value = model.DateTo;        var lane = cmd.CreateParameter();        lane.ParameterName = "@Lane";        lane.DbType = DbType.Int32;        lane.Direction = ParameterDirection.Input;        lane.Value = model.Lane;        var plaza = cmd.CreateParameter();        plaza.ParameterName = "@Plaza";        plaza.DbType = DbType.String;        plaza.Direction = ParameterDirection.Input;        plaza.Value = model.Plaza;        cmd.Parameters.Add(dtFrom);        cmd.Parameters.Add(dTo);        cmd.Parameters.Add(lane);        cmd.Parameters.Add(plaza);        try        {            using (var reader = cmd.ExecuteReader())            {                var result = ((IObjectContextAdapter) db)                    .ObjectContext                    .Translate<ManualReadTag>(reader)                    .ToList();                return result;            }        }        catch (Exception ex)        {            Console.WriteLine(ex.Message);            MessageBox.Show(ex.Message);            return null;        }    }}这段代码有效,我只需要输入 intawait关键字,这样我就可以使用async. 您能指出我正确的方法吗?
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您可以尝试ExecuteReaderAsync改为:

await cmd.ExecuteReaderAsync()


查看完整回答
反对 回复 2023-06-25
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

到处都有异步 API。并且不要忘记丢弃所有一次性用品。


public async Task<List<ManualReadTag>> GetManuallyReadTagsAsync(ParameterManualTags model)

{

    var db = new ApplicationDbContext();

    using (var cnxn = db.Database.Connection)

    {

        using (var cmd = cnxn.CreateCommand())

        {

            cmd.CommandText = "GetManualReadForDedicated";

            cmd.CommandType = CommandType.StoredProcedure;


            var dtFrom = cmd.CreateParameter();

            dtFrom.ParameterName = "@DateFrom";

            dtFrom.DbType = DbType.Date;

            dtFrom.Direction = ParameterDirection.Input;

            dtFrom.Value = model.DateFrom;


            var dTo = cmd.CreateParameter();

            dTo.ParameterName = "@DateTo";

            dTo.DbType = DbType.Date;

            dTo.Direction = ParameterDirection.Input;

            dTo.Value = model.DateTo;


            var lane = cmd.CreateParameter();

            lane.ParameterName = "@Lane";

            lane.DbType = DbType.Int32;

            lane.Direction = ParameterDirection.Input;

            lane.Value = model.Lane;


            var plaza = cmd.CreateParameter();

            plaza.ParameterName = "@Plaza";

            plaza.DbType = DbType.String;

            plaza.Direction = ParameterDirection.Input;

            plaza.Value = model.Plaza;


            cmd.Parameters.Add(dtFrom);

            cmd.Parameters.Add(dTo);

            cmd.Parameters.Add(lane);

            cmd.Parameters.Add(plaza);


            await cnxn.OpenAsync();


            using (var reader = await cmd.ExecuteReaderAsync())

            {

                var result = ((IObjectContextAdapter)db)

                    .ObjectContext

                    .Translate<ManualReadTag>(reader)

                    .ToList();

                return result;

            }

        }

    }

}


查看完整回答
反对 回复 2023-06-25
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信