private Task ReceiveMessage() { return(Task.Run(() => { try { byte[] buffer = new byte[1024 * 1024 * 10]; List <byte> tmpBuffer = new List <byte>(); while (true) { if (client == null || client.Client == null) { throw new Exception("client is null"); } int count = client.Client.Receive(buffer); if (count == 0) { throw new Exception("time out"); } tmpBuffer.AddRange(buffer.Take(count)); tmpBuffer = PacketHelper.Divide(tmpBuffer, new Action <Packet>(packet => { if (packet.IsReply) { lock (objMessage) { if (messages.ContainsKey(packet.Identify)) { messages[packet.Identify].Add(packet); } else { messages[packet.Identify] = new List <Packet>() { packet } }; } } else { requestPackets.Enqueue(packet); } })); } } catch (Exception ex) { Console.WriteLine($"ReceiveMessage Exception{ex.Message}"); NotifyConnectStateChanged(new ConnectStateArgs { ConnectState = ConnectState.Faild }, ex.Message); } })); }