Exemple #1
0
        public async Task FinallyReportsException()
        {
            var       success          = false;
            Exception finallyException = null;
            var       output           = new List <string>();
            var       expectedOutput   = new List <string> {
                "one name"
            };

            var task =
                new FuncTask <string>(Token, _ => "one name")
            {
                Affinity = TaskAffinity.UI
            }
            .Then((s, d) => output.Add(d))
            .Then(_ => { throw new Exception("an exception"); })
            .Then(new FuncTask <string>(Token, _ => "another name")
            {
                Affinity = TaskAffinity.Exclusive
            })
            .ThenInUI((s, d) => output.Add(d))
            .Finally((s, e) =>
            {
                success          = s;
                finallyException = e;
            });

            await task.StartAndSwallowException();

            Assert.IsFalse(success);
            CollectionAssert.AreEqual(expectedOutput, output);
            Assert.IsNotNull(finallyException);
            Assert.AreEqual("an exception", finallyException.Message);
        }
Exemple #2
0
        public async Task ThrowingInterruptsTaskChainButAlwaysRunsFinallyAndCatch()
        {
            var       success          = false;
            string    thrown           = "";
            Exception finallyException = null;
            var       output           = new List <string>();
            var       expectedOutput   = new List <string> {
                "one name"
            };

            var task =
                new FuncTask <string>(Token, _ => "one name")
            {
                Affinity = TaskAffinity.UI
            }
            .Then((s, d) => output.Add(d))
            .Then(_ => { throw new Exception("an exception"); })
            .Catch(ex => thrown = ex.Message)
            .Then(new FuncTask <string>(Token, _ => "another name")
            {
                Affinity = TaskAffinity.Exclusive
            })
            .ThenInUI((s, d) => output.Add(d))
            .Finally((s, e) =>
            {
                success          = s;
                finallyException = e;
            });

            await task.StartAndSwallowException();

            Assert.IsFalse(success);
            CollectionAssert.AreEqual(expectedOutput, output);
            Assert.IsNotNull(finallyException);
        }
Exemple #3
0
        public async Task CatchAlwaysRunsBeforeFinally()
        {
            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"
            };

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

            await task.StartAndSwallowException();

            Assert.IsFalse(success);
            CollectionAssert.AreEqual(expectedOutput, output);
            Assert.IsNotNull(exception);
            Assert.IsNotNull(finallyException);
            Assert.AreEqual("an exception", exception.Message);
            Assert.AreEqual("an exception", finallyException.Message);
            CollectionAssert.AreEqual(new List <string> {
                "catch", "finally"
            }, runOrder);
        }