public IEnumerator Start()
        {
            Application.logMessageReceived += Application_logMessageReceived;
            yield return(1);

            Debug.Log("Tests (9)");

            UnityTask.Run(() => Debug.Log("1 Run Complete"));
            yield return(new WaitForSeconds(1));

            UnityTask.Run(Test2, "2 Run With Param Complete");
            yield return(new WaitForSeconds(1));

            UnityTask.RunCoroutine(Test3);
            yield return(new WaitForSeconds(1));

            UnityTask.RunCoroutine(Test4()).ContinueWith(t => Debug.Log("4 complete"));
            yield return(new WaitForSeconds(1));

            UnityTask.RunCoroutine(Test5).ContinueWith(t => Debug.Log("5 complete"));
            yield return(new WaitForSeconds(1));

            UnityTask.Run(() => { return("6 Run with Result Complete"); }).ContinueWith(t => Debug.Log(t.Result));
            yield return(new WaitForSeconds(1));

            UnityTask.Run <string, string>(Test7, "7 Run with Param and Result").ContinueWith(t => Debug.Log(t.Result));
            yield return(new WaitForSeconds(1));

            var t1 = UnityTask.RunCoroutine <string>(Test8);

            yield return(new WaitForSeconds(1));

            Debug.Log(t1.Result);
            UnityTask.RunCoroutine <string>(Test9).ContinueWith(t => Debug.Log(t.Result));
        }
        void BackgroundToRotine()
        {
            UnityTask.Run(() =>
            {
                Debug.Log("Thread A Running");

                var task = UnityTask.RunCoroutine(RoutineFunction());

                while (task.IsRunning)
                {
                    Debug.Log(".");
                    UnityTask.Delay(500);
                }

                Debug.Log("Thread A Done");
            });
        }
 void CoroutineUnityTaskState()
 {
     UnityTask.RunCoroutine <string>(CoroutineUnityTaskStateAsync).ContinueWith(o => Debug.Log(o.Result));
 }
        public IEnumerator Start()
        {
            Output.text = string.Empty;
            Counter     = 0;
            Application.logMessageReceived += Application_logMessageReceived;
            yield return(1);


            UnityTask.Run(() =>
            {
                Counter++;
                Debug.Log("1 Run");
            });
            yield return(new WaitForSeconds(1));

            Assert(() => Counter == 1, 1);

            UnityTask.Run(Test2, "2 Run With Param");
            yield return(new WaitForSeconds(1));

            Assert(() => Counter == 2, 2);

            UnityTask.RunCoroutine(Test3);
            yield return(new WaitForSeconds(1));

            Assert(() => Counter == 3, 3);

            var t4 = UnityTask.RunCoroutine(Test4()).ContinueWith(t =>
            {
                Counter++;
                Debug.Log("5 Coroutine with Continue");
            });

            yield return(StartCoroutine(t4.WaitRoutine()));

            Assert(() => Counter == 5, 5);
            yield return(new WaitForSeconds(1));

            var t5 = UnityTask.RunCoroutine(Test5).ContinueWith(t =>
            {
                Counter++;
                Debug.Log("5 Continued");
            });

            yield return(StartCoroutine(t5.WaitRoutine()));

            Assert(() => Counter == 7, 7);
            yield return(new WaitForSeconds(1));

            var t6 = UnityTask.Run(() => { return("6 Run with Result And Continue"); }).ContinueWith(t => { Counter++; Debug.Log(t.Result); });

            yield return(StartCoroutine(t6.WaitRoutine()));

            Assert(() => Counter == 8, 8);
            yield return(new WaitForSeconds(1));

            var t7 = UnityTask.Run <string, string>(Test7, "7 Run with Param and Result And Continue").ContinueWith(t => { Counter++; Debug.Log(t.Result); });

            yield return(StartCoroutine(t7.WaitRoutine()));

            yield return(new WaitForSeconds(1));

            Assert(() => Counter == 10, 10);

            var t1 = UnityTask.RunCoroutine <string>(Test8);

            yield return(StartCoroutine(t1.WaitRoutine()));

            Debug.Log(t1.Result);
            Assert(() => Counter == 11, 11);
            yield return(new WaitForSeconds(1));

            var t2 = UnityTask.RunCoroutine <string>(Test9).ContinueWith(t => { Counter++; Debug.Log(t.Result); });

            yield return(StartCoroutine(t2.WaitRoutine()));

            Assert(() => Counter == 13, 13);


            var t12 = UnityTask.Run(() => { return("1"); }).ConvertTo <int>(task =>
            {
                Debug.Log("10 ConvertTo Extension");
                Counter++;
                return(int.Parse(task.Result));
            });

            Assert(() => t12.Result == 1, 14);
            Assert(() => Counter == 14, 14);

            Debug.Log("Success");
        }
 void Routine()
 {
     UnityTask.RunCoroutine(RoutineFunction());
 }