创建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 @   skybirdzw  阅读(232)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示