• 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 的参数来进行相关的转换,效果非常好;
    
    
            }
        }
    }

    完美。

  • 相关阅读:
    [转]DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)
    【机器学习】深入理解人工神经网络结构
    【机器学习】初识人工神经网络
    【机器学习】通过正则化解决过拟合问题
    【机器学习】逻辑回归
    【机器学习】用Octave实现一元线性回归的梯度下降算法
    【机器学习】对梯度下降算法的进一步理解
    【机器学习】从分类问题区别机器学习类型 与 初步介绍无监督学习算法 PAC
    【机器学习】感知机学习算法(PLA)
    【机器学习】1 监督学习应用与梯度下降
  • 原文地址:https://www.cnblogs.com/mc67/p/7466957.html
Copyright © 2020-2023  润新知