结合使用Dapper和executeasync来获取nullreference异常

时间:2019-04-18 22:04:53

标签: c# .net asynchronous asp.net-core dapper

我正在使用带有dapper的MySQL客户端,并尝试使用ExecuteReaderAsync方法执行异步任务。有人告诉我不要将以下内容封装在using语句中,但是当我将任务更改为异步时(在此之前使用executereader,并且工作得很好),我总是收到nullreference异常。

我认为我正在陷入竞争状态,在异步任务完成之前,会在mysql客户端上调用Dispose()。 Dapper在SqlMapper对象/执行读取器异步功能上提供的异步任务。我怀疑这是因为在覆盖存储库中的IDisposable接口时,如何在调用存储库中的下一行(ct.read())之前调用dispose()函数。

我写的任务是:

        public async Task<CodeTable> GetCodeTableById(int codeTableId)
    {
        DynamicParameters parameters = new DynamicParameters();
        parameters.Add("codeTableId", codeTableId);
        CodeTable codeTable = new CodeTable();
        try
        {
            // TODO: convert to async

            var ct = await SqlMapper.ExecuteReaderAsync(conn, "GetCodeTableByID", parameters, commandType: CommandType.StoredProcedure);
            ct.Read();
            int result;
            if (int.TryParse(ct.GetValue(0).ToString(), out result))
            {
                codeTable.Id = result;
            }

            if (int.TryParse(ct.GetValue(1).ToString(), out result))
            {
                codeTable.IntegrationId = result;
            }
            codeTable.CodeTableName = ct.GetValue(2).ToString();
            codeTable.IsActive = (bool)ct.GetValue(3);

            // TODO: Add custom exception for error type
        } catch (Exception ex)
        {
            throw ex;
        }

        return codeTable;
    }

它在await命令的TODO语句正下方中断。我收到以下错误:An unhandled exception occurred while processing the request. NullReferenceException: Object reference not set to an instance of an object.

在这里帮助我了解是否达到比赛条件。我不确定这是不是dotnet核心调用的处置不正确,还是Dapper的executereaderasync函数无法正确利用我的等待标志。

---编辑--- 该问题被错误地标记为与另一个问题重复。我相信我以为我不必调试dapper库就不会错了。

0 个答案:

没有答案