internal IAnswerable <TReply> Answer <TValue, TReply>(TValue value, AbstractAnswerable answerable, LetterOptions options) { ILetter letter = CreateLetter(value, options, answerable.ConversationId); var outstanding = new BlockingOutstanding <TReply>(this); _outstandings.Add(answerable.ConversationId, outstanding); _socket.SendTo(letter, answerable.RemoteNodeId); try { outstanding.Wait(); } finally { _outstandings.Remove(answerable.ConversationId); } return(outstanding.Result); }
public IAnswerable <TReply> Send <TRequest, TReply>(TRequest value, LetterOptions options = LetterOptions.None) { Guid conversationId = Guid.NewGuid(); ILetter letter = CreateLetter(value, options, conversationId); var outstanding = new BlockingOutstanding <TReply>(this); _outstandings.Add(conversationId, outstanding); _socket.Send(letter); try { outstanding.Wait(); } finally { _outstandings.Remove(conversationId); } return(outstanding.Result); }