// Use this for initialization
        void Start()
        {
            var pt = new ParallelTaskCollection();
            var st = new SerialTaskCollection();

            st.Add(Print("s1"));
            st.Add(Print("s2"));
            st.Add(pt);
            st.Add(Print("s3"));
            st.Add(Print("s4"));

            pt.Add(Print("1"));
            pt.Add(Print("2"));

            //only the task runner can actually handle parallel tasks
            //that return Unity operations (when unity compatible
            //schedulers are used)
            pt.Add(UnityAsyncOperationsMustNotBreakTheParallelism());
            pt.Add(UnityYieldInstructionsMustNotBreakTheParallelism());

            pt.Add(new LoadSomething(new UnityWebRequest("www.google.com")).GetEnumerator()); //obviously the token could be passed by constructor, but in some complicated situations, this is not possible (usually while exploiting continuation)
            pt.Add(new LoadSomething(new UnityWebRequest("http://download.thinkbroadband.com/5MB.zip")).GetEnumerator());
            pt.Add(new LoadSomething(new UnityWebRequest("www.ebay.com")).GetEnumerator());
            pt.Add(Print("3"));
            pt.Add(Print("4"));
            pt.Add(Print("5"));
            pt.Add(Print("6"));
            pt.Add(Print("7"));

            st.Start();
        }
        void Start()
        {
            SerialTaskCollection st = new SerialTaskCollection();

            st.Add(Print(1));
            st.Add(Print(2));
            st.Add(DoSomethingAsynchonously(1));
            st.Add(Print(3));
            st.Add(WaitForSecondsTest());
            st.Add(Print(4));
            st.Add(WWWTest());
            st.Add(Print(5));
            st.Add(Print(6));

            st.Start();
        }