У меня есть класс Sender
, который отправляет Message
на IChannel
:
public class MessageEventArgs : EventArgs {
public Message Message { get; private set; }
public MessageEventArgs(Message m) { Message = m; }
}
public interface IChannel {
public event EventHandler<MessageEventArgs> MessageReceived;
void Send(Message m);
}
public class Sender {
public const int MaxWaitInMs = 5000;
private IChannel _c = ...;
public Message Send(Message m) {
_c.Send(m);
// wait for MaxWaitInMs to get an event from _c.MessageReceived
// return the message or null if no message was received in response
}
}
Когда мы отправляем сообщения, IChannel
иногда дает ответ в зависимости от того, какой тип Message
был отправлен с помощью события MessageReceived
. Аргументы события содержат интересующее сообщение.
Я хочу, чтобы метод Sender.Send()
ненадолго подождал, чтобы выяснить, не вызвано ли это событие. Если это так, я верну его MessageEventArgs.Message
свойство. Если нет, я возвращаю ноль Message
.
Как я могу ждать таким образом? Я бы предпочел не выполнять работу с потоками с ManualResetEvents
и так далее, поэтому для меня было бы оптимальным придерживаться обычных event
.