C#中Start和Run

本文探讨了C#中Task委托的执行时机,通过代码示例展示了Start与Run方法的不同。在不使用Wait方法时,Run创建的任务并未执行,而Start会使得任务进入等待运行状态。当在Start后加入Wait,任务将得以执行。Task.Run虽然也会启动任务,但其状态同样是等待运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Task委托的方法是在什么时候执行呢?是在Run的时候还是在Start的时候呢?直接上代码

        public static void Main()
        {
            FuncOne();
        }

        private static void FuncOne()
        {
            Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
            Action action = new Action(Run);
            Task task = new Task(action);
            Console.WriteLine("当前状态:" + task.Status);
            task.Start();
            Console.WriteLine("当前状态:" + task.Status);
        }

        private static void Run()
        {
            Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
        }

然后输出结果:

 发现Run方法居然没有被执行,start方法后面这个的task的状态是WaitingToRun等待被执行,还没有执行呢主程序就结束了,所以需要主程序等待run方法执行完,这样才是我们需要个结果,在task之后加上wait方法如下:

        public static void Main()
        {
            FuncOne();
        }

        private static void FuncOne()
        {
            Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
            Action action = new Action(Run);
            Task task = new Task(action);
            Console.WriteLine("当前状态:" + task.Status);
            task.Start();
            task.Wait();
            Console.WriteLine("当前状态:" + task.Status);
        }

        private static void Run()
        {
            Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
        }

结果如下:

 加上wait后发现start方法是可以执行被委托的方法的,那么run方法呢?还是直接上代码

        public static void Main()
        {
            FuncTwo();
        }

        private static void Run()
        {
            Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
        }

        private static void FuncTwo()
        {
            Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
            Task task = Task.Run(Run);
            Console.WriteLine("当前状态:" + task.Status);
            task.Wait();
            Console.WriteLine("当前状态:" + task.Status);
        }

看结果:

 

 发现使用Task.Run(Action) 方法同样可以触发委托任务,不过调用Run方法后的状态是WaitingToRun,start开始之前的task状态是Created

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值