예제 #1
0
        public void InterlaceError()
        {
            var x = 3;
            var y = 4.57f;
            var z = 1425.67f;

            var xx = x * x;
            var yy = y * y;
            var zz = z.ToString();

            var cw = string.Join(" ", new string[] { xx.ToString(), yy.ToString(), zz });

            Corout.WhenAll <int, float, string>(ac => Routines.Failing(x, ac),
                                                ac => Routines.GetFloatSquareRoot(y, ac),
                                                ac => Routines.GetFloatString(z, ac))
            .OnCatch <Exception>((ex, co) =>
            {
                Debug.Log("catch error");
                //throw ex;
                co.Abort();
            })
            .ContinueWith(() => Routines.NStepVerbose(10))
            //.ContinueWith<string>(Routines.JoinString)
            //.OnComplete(co =>
            //{

            //Debug.Log(co.Result);
            //Assert.AreEqual(cw, co.Result);
            //})
            .Start();
        }
예제 #2
0
        public void Abort()
        {
            var step = 100;

            var corout = Corout.Create(Routines.NStepVerbose(step))
                         .OnSucceed(co => Debug.Log(string.Format("corout complete in {0} steps", step)))
                         .OnCancel(co => Debug.Log("'OnCancel' never called"))
                         .OnFinally(co => Debug.Log("'OnFinally'."));

            corout.Start();


            Corout.WaitThen(10, () =>
            {
                corout.Abort();
                Debug.Log("Aborted");
            });

            // OR

            /*
             * Corout.WaitThen(0.5f, () =>
             * {
             *  corout.Abort();
             *  Debug.Log("Aborted");
             * });
             */
        }
예제 #3
0
        public void Interlace()
        {
            var x = 3;
            var y = 4.57f;
            var z = 1425.67f;

            var xx = x * x;
            var yy = y * y;
            var zz = z.ToString();

            var cw = string.Join(" ", new string[] { xx.ToString(), yy.ToString(), zz });


            Corout.WhenAll(() => Routines.NStepVerbose(5),
                           () => Routines.NStepVerbose(10),
                           () => Routines.NStepVerbose(15))
            .OnSucceed(co =>
            {
                Debug.Log("OnSucceed");
            })
            .Start();


            Corout.WhenAll <int, float, string>(co => Routines.GetIntSquareRoot(x, co),
                                                co => Routines.GetFloatSquareRoot(y, co),
                                                co => Routines.GetFloatString(z, co))
            .OnSucceed(co =>
            {
                Debug.Log(co.Result.Item1);
                Debug.Log(co.Result.Item2);
                Debug.Log(co.Result.Item3);
            })
            .ContinueWith <string>(Routines.JoinString)
            .OnSucceed(co =>
            {
                Debug.Log(co.Result);
                Assert.AreEqual(cw, co.Result);
            })
            .Start();
        }
예제 #4
0
        public void Fence()
        {
            var first  = 10;
            var second = 05;
            var third  = 03;

            int startStep = Scheduler.Instance.Step;

            using (Corout.OpenFence(() => Debug.Log("fenced corout ends...")))
            {
                Corout.Create(() => Routines.NStepVerbose(first))
                .OnSucceed(co =>
                {
                    Debug.Log(string.Format("first corout complete in {0} steps", first));
                    Assert.AreEqual(Scheduler.Instance.Step, startStep + first);
                })
                .Start();

                Corout.Create(() => Routines.NStepVerbose(second))
                .OnSucceed(co =>
                {
                    Debug.Log(string.Format("second corout Complete in {0} steps", second));
                    Assert.AreEqual(Scheduler.Instance.Step, startStep + second);
                })
                .Start();
            }

            Corout.Create(() => Routines.NStepVerbose(third))
            .OnSucceed(co =>
            {
                Debug.Log(string.Format("third corout complete in {0} steps", third));
                Assert.AreEqual(Scheduler.Instance.Step, startStep + Math.Max(first, second) + third + 1);       // 1 step for fence callback
            })
            .Start();

            // OR

            /*
             * var fence01 = Corout.OpenFence(() => Debug.Log("fenced corout ends..."));
             *
             * Corout.Create(() => Routines.NStepVerbose(first))
             *    .OnComplete(co =>
             *    {
             *        Debug.Log(string.Format("first corout complete in {0} steps", first));
             *        Assert.AreEqual(Corout.CurrentStep, startStep + first);
             *    })
             *    .Start();
             *
             * Corout.Create(() => Routines.NStepVerbose(second))
             *    .OnComplete(co =>
             *    {
             *        Debug.Log(string.Format("second corout Complete in {0} steps", second));
             *        Assert.AreEqual(Corout.CurrentStep, startStep + second);
             *    })
             *    .Start();
             *
             * fence01.Close();
             *
             * Corout.Create(() => Routines.NStepVerbose(third))
             *    .OnComplete(co =>
             *    {
             *        Debug.Log(string.Format("third corout complete in {0} steps", third));
             *        Assert.AreEqual(Corout.CurrentStep, startStep + Math.Max(first, second) + third + 1); // 1 step for fence callback
             *    })
             *    .Start();
             */
        }