为什么cmd.BeginExecuteNonQuery(callback,cmd)抛出"the asynchronous operation has already completed"



在下面的代码中command.EndExecuteNonQuery抛出

异步操作已完成。

EndExecuteNonQuery结束异步操作。MSDN 声明使用EndExecuteNonQuery正确完成操作。有什么想法吗?

using (var command = new SqlCommand("EXEC SP", connection))
{
    AsyncCallback callback = HandleCallBack;
    command.BeginExecuteNonQuery(callback, command);
}
private void HandleCallBack(IAsyncResult result)
{
    try
    {
        using (var command = (SqlCommand)result.AsyncState)
        {
            command.EndExecuteNonQuery(result);
        }
    }
    catch (Exception ex)
    {
    }
}

异步操作完成之前,不应释放命令(此处隐式通过 using 语句)。

将 using 语句替换为 try/catch 以在 Start 上释放异常命令,并添加 try/finally 以在异步回调中释放命令。

最新更新