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)); }
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(); }
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; } }
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); }); }
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); }