Ejemplo n.º 1
0
            public async Task Handle <TValue>(EffStateMachine <TValue> stateMachine)
            {
                List <TValue>?values = null;
                Exception?    error  = null;

                try
                {
                    values = await NonDetEffectHandler.Run(stateMachine);
                }
                catch (Exception e)
                {
                    error = e;
                }

                if (values != null)
                {
                    foreach (var result in values)
                    {
                        stateMachine.SetResult(result);
                        await ContinueStateMachine(clone : true);
                    }
                }
                else
                {
                    stateMachine.SetException(error !);
                    await ContinueStateMachine();
                }
            }
Ejemplo n.º 2
0
            /// <summary>
            ///   Executes the state machine to completion, using non-deterministic semantics,
            ///   appending any results to the handler state.
            /// </summary>
            private async Task ContinueStateMachine(bool clone = false)
            {
                var stateMachine = clone ? _stateMachine.Clone() : _stateMachine;
                var results      = await NonDetEffectHandler.Run(stateMachine);

                Results.AddRange(results);
            }
Ejemplo n.º 3
0
        public static async Task <TResult[]> Run <TResult>(Eff <TResult> eff)
        {
            var stateMachine = eff.GetStateMachine();
            var handler      = new NonDetEffectHandler <TResult>();
            await handler.Handle(stateMachine);

            return(handler.ResultHolder.GetResults());
        }
Ejemplo n.º 4
0
        static async Task Main()
        {
            var results = await NonDetEffectHandler.Run(Test());

            foreach (var result in results)
            {
                Console.WriteLine(result);
            }
        }
Ejemplo n.º 5
0
 static async Task Main()
 {
     await NonDetEffectHandler.Run(Test());
 }