Асинхронный обратный вызов "Async End вызван с IAsyncResult из другого метода Begin. Имя параметра: результат" - PullRequest
1 голос
/ 19 сентября 2009

Я не могу понять, почему это так.

У меня есть метод подключения, который отлично работает:

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));

Это работает совершенно нормально. Я скопировал и вставил этот код для моего метода отправки:

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 вызывается с IAsyncResult из другого метода Begin. Имя параметра: результат "

говоря

Первое случайное исключение типа «System.ArgumentException» произошло в mscorlib.dll

Я не на 100% асинхронен, так что есть что-то очевидное, что я делаю неправильно?

1 Ответ

8 голосов
/ 19 сентября 2009

Вы должны звонить EndSendToServer, а не EndConnect.

Генерируемые асинхронные методы соединяются с префиксами Begin и End; вы начинаете асинхронную операцию одним методом, а заканчиваете другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...