示例#1
0
        public IEtlPipeline RunParallel(Func <EtlPipelineContext, IEnumerable <IEtlOperation> > ctx)
        {
            var operations        = ctx(Context).ToArray();
            var parellelOperation =
                new ParallelOperation(
                    $"Executing steps in parellel => [{string.Join(", ", operations.Select(x => x.Name))}]",
                    operations);

            return(RegisterOperation(parellelOperation));
        }
示例#2
0
        public async Task LimitedParallel(int maxParallel, int operationCount)
        {
            var testState = new TestState(maxParallel);
            var funcs     = new Func <TestState, CancellationToken, UniTask> [operationCount];

            for (int i = 0; i < funcs.Length; i++)
            {
                funcs[i] = (s, ct) => TestWork(s, ct);
            }
            await ParallelOperation.LimitedParallel(funcs, testState, maxParallel, CancellationToken.None);

            testState.Ensure();
        }
示例#3
0
文件: Startup.cs 项目: ikorin24/Elffy
        private static async UniTask Start(IHostScreen screen)
        {
            UniTask.Void(async() =>
            {
                await foreach (var _ in screen.Frames(FrameTiming.Update))
                {
                    if (screen.Keyboard.IsPress(Elffy.InputSystem.Keys.Escape))
                    {
                        screen.Close();
                    }
                }
            });
            var(drLayer, wLayer, uiLayer) =
                await LayerPipelines.CreateBuilder(screen).Build(
                    () => new DeferredRenderingLayer(),
                    () => new WorldLayer(),
                    () => new UILayer());

            InitializeLights(screen);
            var uiRoot  = uiLayer.UIRoot;
            var timings = screen.TimingPoints;

            uiRoot.Background = Color4.Black;
            try {
                await ParallelOperation.WhenAll(
                    //Sample.CreateUI(uiLayer.UIRoot),
                    CreateDice2(drLayer),
                    CreateCameraMouse(wLayer, new Vector3(0, 3, 0)),
                    CreateDice(wLayer),
                    CreateModel2(wLayer),
                    CreateBox(wLayer),
                    CreateFloor(wLayer),
                    //CreateFloor2(wLayer),
                    CreateSky(wLayer),
                    timings.Update.DelayTime(800));

                var time = TimeSpanF.FromMilliseconds(200);
                await foreach (var frame in timings.Update.Frames())
                {
                    if (frame.Time >= time)
                    {
                        break;
                    }
                    uiRoot.Background.A = 1f - frame.Time / time;
                }
            }
            finally {
                uiRoot.Background = Color4.Transparent;
            }
        }
示例#4
0
        public async Task ExceptionTest(int operationCount)
        {
            const int MaxParallel = 0;

            var testState = new TestState(MaxParallel);
            var funcs     = new Func <TestState, CancellationToken, UniTask> [operationCount];

            for (int i = 0; i < funcs.Length; i++)
            {
                funcs[i] = (s, ct) => TestWork(s, ct);
            }
            await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() =>
            {
                await ParallelOperation.LimitedParallel(funcs, testState, -1, CancellationToken.None);
            });
        }
示例#5
0
        public double Run(int iter, Payoff payoff)
        {
            int             it = iter;
            ParallelOptions parallel_options = new ParallelOptions {
                MaxDegreeOfParallelism = 16
            };
            double sum = 0.0;


            Parallel.For(0, iter, parallel_options, (i) =>
            {
                ParallelOperation.Add(ref sum, payoff(this.param, this.mc.Next()));
            });

            return(sum / iter);
        }