public virtual async Task<Packet> SendAndWaitResponse(Packet packet, ushort responsePacketId, Func<Packet, bool> predicate)
{
TaskCompletionSource<Packet> tcs = new TaskCompletionSource<Packet>();
TCSData data = new TCSData() { packetId = responsePacketId, tcs = tcs, predicate = predicate };
Packet response = null;
lock (_listTCS)
{
_listTCS.Add(data);
}
await Task.Run(() =>
{
try
{
_session.SendPacket(packet);
response = tcs.Task.Result;
}
catch (Exception)
{
// Nothing to do.
}
});
return response;
}