public void BeginSend(Message message, Action onMessage, Action <Exception> onError) { byte[] buffer = message.ToByte(); channel.BeginWrite(buffer, 0, buffer.Length, OnWriteMessage, null); void OnWriteMessage(IAsyncResult asyncResult) { try { channel.EndWrite(asyncResult); onMessage(); } catch (Exception exception) { onError(exception); } } }