Example #1
0
        /// <summary>
        /// Send AsyncMessage.<br/>
        /// Important!!: If not found receiver then freeze.
        /// </summary>
        /// <typeparam name="TMessage">wrapped message type</typeparam>
        /// <typeparam name="TResult">return type</typeparam>
        /// <param name="self"></param>
        /// <param name="message">wrapped message</param>
        /// <returns></returns>
        public static async Task <TResult> SendAsync <TMessage, TResult>(this IMessenger self, TMessage message)
            where TMessage : MessageBase
        {
            var asyncMessage = new AsyncMessage <TMessage>(message);

            self.Send(asyncMessage);
            return((TResult)await asyncMessage.Task);
        }
Example #2
0
        /// <summary>
        /// Send AsyncMessage.<br/>
        /// Important!!: If not found receiver then freeze.
        /// </summary>
        /// <typeparam name="TMessage">wrapped message type</typeparam>
        /// <param name="self"></param>
        /// <param name="message">wrapped message</param>
        /// <returns></returns>
        public static Task SendAsync <TMessage>(this IMessenger self, TMessage message)
            where TMessage : MessageBase
        {
            var asyncMessage = new AsyncMessage <TMessage>(message);

            self.Send(asyncMessage);
            return(asyncMessage.Task);
        }
        private async void ReceiveAsyncMessage(AsyncMessage <TMessage> m)
        {
            try
            {
                var result = await this.callback(m.InnerMessage);

                m.SetResult(result);
            }
            catch (Exception ex)
            {
                m.SetException(ex);
            }
        }