示例#1
0
文件: Tests.cs 项目: Lw960201/Unity-1
        public async Task StartAsyncWorks()
        {
            var task = new FuncTask <int>(Token, _ => 1);
            var ret  = await task.StartAsAsync();

            Assert.AreEqual(1, ret);
        }
示例#2
0
 public async Task DeferExceptions()
 {
     var runOrder = new List <string>();
     var task     = new FuncTask <int>(Token, _ => 1)
                    .Defer(async d =>
     {
         throw new InvalidOperationException();
         return(await TaskEx.FromResult(d));
     })
                    .Then(_ => { });
     await task.StartAsAsync();
 }
示例#3
0
        /// <summary>
        /// Always call Then or another non-Defer variant after calling Defer
        /// </summary>
        //[Test]
        //[Ignore("borked")]
        public async Task TwoDefersInARowWillNotWork()
        {
            var runOrder = new List <int>();
            var act      = new FuncTask <List <int> >(Token, _ => runOrder)
            {
                Name = "First"
            }
            .Defer(GetData)
            .Defer(GetData2)
            .Finally((_, e, v) => v);

            ;
            var ret = await act.StartAsAsync();

            Assert.IsNull(ret);
        }
示例#4
0
文件: Tests.cs 项目: Lw960201/Unity-1
        public async Task FinallyCanAlsoNotReturnData()
        {
            var       success          = false;
            Exception exception        = null;
            Exception finallyException = null;
            var       runOrder         = new List <string>();
            var       output           = new List <string>();
            var       expectedOutput   = new List <string> {
                "one name", "another name", "done"
            };

            var task =
                new FuncTask <string>(Token, _ => "one name")
            {
                Affinity = TaskAffinity.UI
            }
            .Then((s, d) => output.Add(d))
            .Then(new FuncTask <string>(Token, _ => "another name")
            {
                Affinity = TaskAffinity.Exclusive
            })
            .Then((s, d) =>
            {
                output.Add(d);
                return("done");
            })
            .Finally((s, e, d) =>
            {
                lock (runOrder)
                {
                    success = s;
                    output.Add(d);
                    finallyException = e;
                    runOrder.Add("finally");
                }
            });

            await task.StartAsAsync();

            Assert.IsTrue(success);
            CollectionAssert.AreEqual(expectedOutput, output);
            Assert.IsNull(exception);
            Assert.IsNull(finallyException);
            CollectionAssert.AreEqual(new List <string> {
                "finally"
            }, runOrder);
        }
示例#5
0
文件: Tests.cs 项目: willofd02/Unity
        public async Task StartAsyncWorks()
        {
            Stopwatch watch;
            ILogging  logger;

            StartTest(out watch, out logger);

            var task = new FuncTask <int>(Token, _ => 1);

            StartTrackTime(watch);
            var waitTask = task.StartAsAsync();
            var retTask  = await TaskEx.WhenAny(waitTask, TaskEx.Delay(Timeout));

            StopTrackTimeAndLog(watch, logger);
            Assert.AreEqual(retTask, waitTask);
            var ret = await waitTask;

            Assert.AreEqual(1, ret);
        }
示例#6
0
        /// <summary>
        /// Always call Then or another non-Defer variant after calling Defer
        /// </summary>
        //[Test]
        //[Ignore("borked")]
        public async Task AlwaysChainAsyncBodiesWithNonAsync()
        {
            var runOrder = new List <int>();
            var act      = new FuncTask <List <int> >(Token, _ => runOrder)
            {
                Name = "First"
            }
            .Defer(GetData)
            .Then((_, v) =>
            {
                v.Add(2);
                return(v);
            })
            .Defer(GetData2)
            .Then((_, v) =>
            {
                v.Add(4);
                return(v);
            })
            .Defer(async v =>
            {
                await TaskEx.Delay(10);
                v.Add(5);
                return(v);
            })
            .Then((_, v) =>
            {
                v.Add(6);
                return(v);
            })
            .Defer(v => new Task <List <int> >(() =>
            {
                v.Add(7);
                return(v);
            }), TaskAffinity.Concurrent)
            .Finally((_, e, v) => v);

            ;
            var ret = await act.StartAsAsync();

            CollectionAssert.AreEqual(Enumerable.Range(1, 7), runOrder);
        }