private void CalculateDiscriminant(QuadraticEquationContext context) { double discriminant = Math.Pow(context.B, 2) - 4 * context.A * context.C; context.Discriminant = discriminant; Console.WriteLine("[{0}] Calculated discriminant = {1}", Thread.CurrentThread.ManagedThreadId, discriminant); }
private void SameRoots(QuadraticEquationContext context) { double root = -context.B / 2 * context.A; context.Root1 = root; context.Root2 = root; Console.WriteLine("[{0} Same roots: {1}", Thread.CurrentThread.ManagedThreadId, root); }
public void Test(double a, double b, double c) { QuadraticEquationContext context = new QuadraticEquationContext(a, b, c); IWorkflow <QuadraticEquationContext> workflow = new Workflow <QuadraticEquationContext>() .Do(CalculateDiscriminant) .If(RootsChecking, new Workflow <QuadraticEquationContext>().If(IfSameRoots, new Workflow <QuadraticEquationContext>().Do(SameRoots), new Workflow <QuadraticEquationContext>().DoAsynch(CalculateRoot1, CalculateRoot2)), new Workflow <QuadraticEquationContext>().Do(NoRoots) ) .Do(obj => Console.WriteLine("[{0}] finish", Thread.CurrentThread.ManagedThreadId)); workflow.Start(context); }
private void NoRoots(QuadraticEquationContext context) { context.ResultRootsNumber = 0; Console.WriteLine("No Roots"); }
private bool RootsChecking(QuadraticEquationContext context) { return(context.Discriminant >= 0); }
private bool IfSameRoots(QuadraticEquationContext context) { return(context.Discriminant == 0); }
private void CalculateRoot2(QuadraticEquationContext context) { context.Root2 = (-context.B - Math.Sqrt(context.Discriminant)) / 2 * context.A; Console.WriteLine("[{0}] root2: {1}", Thread.CurrentThread.ManagedThreadId, context.Root2); }