Exemple #1
0
        public static async Task <IEnumerable <T> > Match <T>(this IReceivedMessageList published, Expression <Func <IReceivedMessage <T>, bool> > filter, TimeSpan?timeout = default(TimeSpan?)) where T : class
        {
            try
            {
                var giveUpAt = DateTime.Now + (timeout ?? TimeSpan.FromSeconds(30));

                while (DateTime.Now < giveUpAt)
                {
                    if (published.AsQueryable().Where(x => typeof(T).IsAssignableFrom(x.MessageType)).Cast <IReceivedMessage <T> >().Where(filter).Any())
                    {
                        return(published.AsQueryable().Where(x => typeof(T).IsAssignableFrom(x.MessageType)).Cast <IReceivedMessage <T> >().Where(filter).Select(x => x.Context.Message).ToList());
                    }

                    await Task.Delay(10).ConfigureAwait(false);
                }
            }
            catch (InvalidOperationException)
            {
                await Task.Delay(10).ConfigureAwait(false);

                return(await published.Match <T>(filter, timeout));
            }

            return(new T[] { });
        }
Exemple #2
0
 public static async Task <IEnumerable <T> > Any <T>(this IReceivedMessageList received, Expression <Func <IReceivedMessage <T>, bool> > filter, TimeSpan?timeout = default(TimeSpan?)) where T : class
 {
     return(await received.Match <T>(m => m.MessageType == typeof(T) && filter.Compile()(m)));
 }