BeginSend не возвращается сразу - PullRequest
0 голосов
/ 30 октября 2018

Код клиента ::

IDGSocketClient client = new IDGSocketClient();
client.Connect("127.0.0.1", 8888);
client.Send("dadsa" ); 

IDGSocketClient Class

public void Connect(string ipAddress, int port)
{
    clientSocket.Connect(ipAddress, port);
}

public void Send(string data, int i)
{
    Console.Write("send called");
    Socket socket = clientSocket.Client;
    byte[] a =  { 1, 2 };
    socket.BeginSend(a, 0,1, 0, new AsyncCallback(SendCallback), null);
    Console.Write("Send Returned");
}
public void SendCallback(IAsyncResult ar)
{
    while (true) ;
}

Сервер:

IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 8888);
serverSocket = new TcpListener(ipEndPoint);
serverSocket.Start();
TcpClient client = serverSocket.AcceptTcpClient();

Теперь я ожидаю, что BeginSend вернется немедленно или, по крайней мере, через некоторое время, но здесь это не так.

выход

send called

тогда как результат не должен быть

send calledSend Returned

Перефразировать: BeginSend - это метод, который в соответствии с документацией должен вызывать функцию обратного вызова в новом потоке, причем поток, в котором он был вызван, не будет заблокирован (если это не сделано вручную). В моем случае, даже если обратный вызов имеет бесконечный цикл, он должен выполняться в другом потоке, а поток, который вызвал beginSend, должен выполнить следующий оператор Console.Write, по моему мнению.

...