net中多线程返回值

方法有三种,我们直接上代码;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication11
{

    //线程中的返回值,有些事儿,是你没有经历过痛苦,就不知道什么叫幸福,
    //现在,如果我们要获取一个异步线程(方法的放回值) 我们如果基于Task的方式去做就是非常方便滴呀;
    //然后你要知道如果基于原来的thread 方法去做,是比较麻烦呀;

    public static class Person
    {
       
        //要用
        public static int EatTaskAsync()
        {
            //模拟一下耗时计算
            Thread.Sleep(1000);
            return 100;
        }

        //其实方法哼加单的了罗;
        //申明一个结果变量;
        private static int _result;
        public static int Result
        {
            get
            {
                return _result;
            }
        }
        public static void Eat()
        {
            //模拟一下耗时计算
            Thread.Sleep(1000);
            //值得放回就能使用我们的return了滴哎呦;
            _result = 100;
        }


        //这样我们就可以传递传输额同事得到返回值了滴呀;
        public static void Fuck(object obj)
        {
            //还有一种方式,就是借助我们的辅助了的滴哎呦;
            //这个是最老的做法了;
            
            var ar=(obj as Arg);
            int x = ar.x;
            int y = ar.y; //这里可以提取中间变量的,算了;
            Thread.Sleep(1000); //这个就得到 我们想要的基本值滴呀;效果还是挺好滴呀;
            ar.returnValue = x + y;
        }

    }

    public  class Arg
    {
        //方法参数
        //这样的做法,就不太严谨,既可以set 又可以get的,不太好;
        public int x;
        public int y;
        //方法返回值
        public long returnValue;
        
    }

    class Program
    {
        static void Main(string[] args)
        {
            //神奇程序员,效果很好滴啊;
           //如果用Task来做,那简直就是方便到家的做法滴呀;
            var task =new Task<int>(Person.EatTaskAsync);//就这个方便简单;
            task.Start();
            var result = task.Result;
            Console.WriteLine(result);//要是在以前,那个一个多么麻烦的方法滴呀;


            //如果是传统的多线程那么就要这样做了的呀;
            Thread thread = new Thread(Person.Eat);
            thread.Start();
            thread.Join();  //堵塞我们的主线层,知道任务完毕,然后再来取出我们额值;
            Console.WriteLine("RESULT:{0}",Person.Result);


            //然后我们做的时候
            var ar = new Arg();
            ar.x = 10;
            ar.y = 12;

           //执行了;
            Thread thread2 = new Thread(Person.Fuck);
            thread2.Start(ar); //结束我们的一个参数;
            thread2.Join();
            //效果是非常好的啊;
            Console.WriteLine("RESULT:{0}",ar.returnValue);
            


            Console.ReadLine();


            //结果方法;
            //方法一:直接使用的Task.Result
            //方法二:直接将我们要调用的方法 封装在我们的一个类中,然后类中设置属性Result;
            //方法三:借助赋值类,利用thread 中的一个object 的参数来进行相关的转换,效果非常好;


        }
    }
}

完美。

 

posted @ 2017-09-02 16:12  咕-咚  阅读(278)  评论(0编辑  收藏  举报