异步回调“Async End使用来自不同Begin方法的IAsyncResult调用。参数名称:result”

时间:2009-09-19 18:33:28

标签: wcf asynchronous

我无法弄清楚为什么会这样。

我有一个正常的连接方法:

public void Connect()
{
    _client.BeginConnect(new AsyncCallback(this.ConnectCallback), _client);
}

public void ConnectCallback(IAsyncResult asyncResult)
{
    ServerClient callback = null;

        callback = (ServerClient)asyncResult.AsyncState;
        callback.EndConnect(asyncResult);

        Program.IMMainForm.BeginInvoke(new frmMain.ConnectionEstablishedNotification(Program.IMMainForm.ConnectionEstablished));

这完全没问题。我几乎复制并粘贴了我的Send方法的代码:

public void Send(string code, string data)
{
    _client.BeginSendToServer((code + data), new AsyncCallback(this.SendCallback), _client);
}


public void SendCallback(IAsyncResult asyncResult)
{
    ServerClient callback = null;

        callback = (ServerClient)asyncResult.AsyncState;
        callback.EndConnect(asyncResult);
}

但是,EndConnect行出错,错误

“Async End使用来自不同Begin方法的IAsyncResult调用。 参数名称:结果“

mscorlib.dll中出现'System.ArgumentException'类型的第一次机会异常

我不是百分之百地处理异步的东西,所以有什么明显的我做错了吗?

1 个答案:

答案 0 :(得分:8)

您应该致电EndSendToServer,而不是EndConnect

生成的异步方法与BeginEnd前缀配对;你用一种方法开始异步操作,然后用另一种方法结束。