创建Task示例的各种方式

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    //测试创建Task示例的各种方式
    public class TaskTest
    {
        //定义方法,返回void,入参为Object
        private static void OpNormal(Object state)
        {
            Console.WriteLine("In OpNormal,state=" + state);
            Thread.Sleep(1000);
        }

        //定义方法,返回void,入参非Object
        private static void OpWithParamInt(Int32 state)
        {
            Console.WriteLine("In OpWithParamInt,state=" + state.ToString());
            Thread.Sleep(1000);
        }

        //定义方法,返回类型非void,入参非Object
        private static Int32 OpWithParamIntAndReturnInt(Int32 state)
        {
            Console.WriteLine("In OpWithParamIntAndReturnInt,state=" + state.ToString());
            Thread.Sleep(1000);
            return state;
        }

        //定义方法,返回类型非void,入参为多个
        private static String OpWithParamIntAndReturnInt2(ParamObj o)
        {
            String str = o.n.ToString() + o.s;
            Console.WriteLine("In OpWithParamIntAndReturnInt2,state=" + o.n.ToString() + ",s=" + o.s);
            Thread.Sleep(1000);
            return str;
        }

        class ParamObj
        {
            public int n { get; set; }
            public string s { get; set; }
        }

        public static void RunTest()
        {
            //参数Object,无返回值
            Task t1 = new Task(OpNormal, 100);
            t1.Start();

            //参数Int32,无返回值
            Task t2 = new Task(state => OpWithParamInt((Int32)state), 200);
            t2.Start();

            //参数Int32,有返回值
            Task<Int32> t3 = new Task<Int32>(n => OpWithParamIntAndReturnInt((Int32)n), 300);
            //Task<Int32> t3 = new Task<Int32>(() => OpWithParamIntAndReturnInt(300)); //另一种写法
            t3.Start();
            //指定参数timeout,毫秒,如果在指定时间内执行完毕则返回true,否则返回false.
            bool b = t3.Wait(1000000);
            Console.WriteLine("The result is:" + t3.Result + ",The wait result is:" + b.ToString());

            //多个参数,有返回值
            ParamObj obj = new ParamObj { n = 400, s = "aaa" };
            try
            {
                Task<String> t4 = new Task<string>(o => OpWithParamIntAndReturnInt2((ParamObj)o), obj);
                t4.Start();
                Console.WriteLine("The OpWithParamIntAndReturnInt2 result is:" + t4.Result);
            }
            catch (Exception ex)
            {

            }
        }
    }
}

 

posted @ 2020-03-08 18:00  skybirdzw  阅读(243)  评论(0)    收藏  举报