示例#1
0
        public static IEnumerableAsync <T> SelectMany <M, T>(this IEnumerableAsync <M> input,
                                                             Action <M, Queue <T> > selector, Action <Queue <T> > finalizer = null)
        {
            var buffer = new Queue <T> ();

            return(EnumerableAsync.Produce <T>(async yieldAsync =>
            {
                await input.ForEach(async m =>
                {
                    selector(m, buffer);
                    while (buffer.Count > 0)
                    {
                        await yieldAsync.YieldAsync(buffer.Dequeue());
                    }
                    return true;
                });
                if (finalizer != null)
                {
                    finalizer(buffer);
                    while (buffer.Count > 0)
                    {
                        await yieldAsync.YieldAsync(buffer.Dequeue());
                    }
                }
            }));
        }
        public async Task EnumerableAsyncProduceTest()
        {
            int sequenceLen = 10000;
            var producer    = EnumerableAsync.Produce <int>(async yielder =>
            {
                for (var i = 0; i < sequenceLen; ++i)
                {
                    await yielder.YieldAsync(i);
                    await Task.Yield();
                }
            });
            var multiplexed = producer.Multiplex();
            var list1       = multiplexed.Select(async i =>
            {
                await Task.Yield();
                return(i * 10);
            }).ToList();
            var list2 = multiplexed.Select(async i =>
            {
                await Task.Yield();
                return(i * 100);
            }).ToList();
            await Task.WhenAll(multiplexed.Open(), list1, list2);

            for (int i = 0; i < sequenceLen; ++i)
            {
                Assert.AreEqual(i * 10, list1.Result[i]);
                Assert.AreEqual(i * 100, list2.Result[i]);
            }
        }
示例#3
0
        static async Task RunTimelinePostprocessor(LogSourcePostprocessorInput input)
        {
            string outputFileName = input.OutputFileName;
            var    logProducer    = LJT.Extensions.Read(new LJT.Reader(), input.LogFileName,
                                                        null, input.ProgressHandler).Multiplex();

            var profilingEvents = (new LJT.ProfilingTimelineEventsSource()).GetEvents(logProducer);

            var lister = EnumerableAsync.Merge(
                profilingEvents
                ).ToList();

            Task[] leafs = new Task[]
            {
                lister,
                logProducer.Open(),
            };
            await Task.WhenAll(leafs);

            TimelinePostprocessorOutput.SerializePostprocessorOutput(
                await lister,
                null,
                evtTrigger => TextLogEventTrigger.Make((LJT.Message)evtTrigger),
                input.InputContentsEtagAttr
                ).SaveToFileOrToStdOut(outputFileName);
        }
示例#4
0
 public static IEnumerableAsync <T> Select <T, M>(this IEnumerableAsync <M[]> input, Func <M, T> selector)
 {
     return(EnumerableAsync.Produce <T>(yieldAsync =>
                                        input.ForEach(async messages =>
     {
         foreach (var evt in messages.Select(selector))
         {
             await yieldAsync.YieldAsync(evt);
         }
         return true;
     })
                                        ));
 }
        static async Task RunTimelinePostprocessor(
            LogSourcePostprocessorInput input, IModel postprocessingModel)
        {
            var logProducer = LJT.Extensions.Read(new LJT.Reader(postprocessingModel.TextLogParser), input.OpenLogFile,
                                                  input.ProgressHandler).Multiplex();

            var profilingEvents = (new LJT.ProfilingTimelineEventsSource()).GetEvents(logProducer);

            var lister = EnumerableAsync.Merge(
                profilingEvents
                );

            var serialize = postprocessingModel.Timeline.CreatePostprocessorOutputBuilder()
                            .SetEvents(lister)
                            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((LJT.Message)evtTrigger))
                            .Build(input);

            await Task.WhenAll(serialize, logProducer.Open());
        }
示例#6
0
        public static IEnumerableAsync <T> SelectMany <M, T>(
            this IEnumerableAsync <M[]> input,
            Action <M, Queue <T> > selector,
            Action <Queue <T> > finalSelector = null,
            Action <T> resultPostprocessor    = null)
        {
            var         buffer = new Queue <T> ();
            Func <T, T> postprocessor;

            if (resultPostprocessor != null)
            {
                postprocessor = x => { resultPostprocessor(x); return(x); }
            }
            ;
            else
            {
                postprocessor = x => x;
            }
            return(EnumerableAsync.Produce <T>(async yieldAsync =>
            {
                await input.ForEach(async messages =>
                {
                    foreach (var m in messages)
                    {
                        selector(m, buffer);
                        while (buffer.Count > 0)
                        {
                            await yieldAsync.YieldAsync(postprocessor(buffer.Dequeue()));
                        }
                    }
                    return true;
                });
                if (finalSelector != null)
                {
                    finalSelector(buffer);
                    while (buffer.Count > 0)
                    {
                        await yieldAsync.YieldAsync(postprocessor(buffer.Dequeue()));
                    }
                }
            }));
        }
示例#7
0
 public static IEnumerableAsync <T> Select <T, M>(this IEnumerableAsync <M[]> input,
                                                  Func <M, IEnumerable <T> > selector, Func <IEnumerable <T> > finalizer)
 {
     return(EnumerableAsync.Produce <T>(async yieldAsync =>
     {
         await input.ForEach(async messages =>
         {
             foreach (var evt in messages.SelectMany(selector))
             {
                 await yieldAsync.YieldAsync(evt);
             }
             return true;
         });
         if (finalizer != null)
         {
             foreach (var evt in finalizer())
             {
                 await yieldAsync.YieldAsync(evt);
             }
         }
     }));
 }
示例#8
0
        static async Task RunTimelinePostprocessor(
            LogSourcePostprocessorInput input, IModel postprocessingModel)
        {
            string outputFileName = input.OutputFileName;
            var    logProducer    = LJT.Extensions.Read(new LJT.Reader(postprocessingModel.TextLogParser), input.LogFileName,
                                                        input.ProgressHandler).Multiplex();

            var profilingEvents = (new LJT.ProfilingTimelineEventsSource()).GetEvents(logProducer);

            var lister = EnumerableAsync.Merge(
                profilingEvents
                );

            var serialize = postprocessingModel.Timeline.SavePostprocessorOutput(
                lister,
                null,
                evtTrigger => TextLogEventTrigger.Make((LJT.Message)evtTrigger),
                input
                );

            await Task.WhenAll(serialize, logProducer.Open());
        }