为什么cmd.BeginExecuteNonQuery(callback,cmd)抛出“异步操作已经完成”

时间:2012-11-20 19:05:06

标签: c# ado.net wcf-data-services

在下面的代码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)
    {

    }
}

1 个答案:

答案 0 :(得分:4)

在异步操作完成之前,不应该释放命令(隐式地在这里,通过using语句)。

将using语句替换为try / catch以将命令置于Begin上的异常上,并添加try / finally以在异步回调中处置该命令。