private async Task EchoInit(Socket socket) { while (true) { var socketWrappedInTask = await Task.Factory.FromAsync( new Func <AsyncCallback, object, IAsyncResult>(socket.BeginAccept), //Begin Accept returns IAsyncResult new Func <IAsyncResult, Socket>(socket.EndAccept), null).ConfigureAwait(false); Console.WriteLine("Echo Server: Client Connected!"); using var stream = new NetworkStream(socketWrappedInTask, true); var buffer = new byte[1024]; var prot = new Protocol(); MessageHandler mh = new MessageHandler(); while (true) { var receivedMessage = await prot.Receive <MessageModel>(stream).ConfigureAwait(false); //Console.WriteLine(receivedMessage.MessageData); _ = Task.Run(() => mh.Handle(receivedMessage)).ConfigureAwait(false); if (receivedMessage.MessageHeaderType != 11 && receivedMessage.MessageHeaderType != 12) { await prot.Send(stream, receivedMessage).ConfigureAwait(false); } } } }