zoukankan      html  css  js  c++  java
  • 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 的参数来进行相关的转换,效果非常好;
    
    
            }
        }
    }

    完美。

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/mc67/p/7466957.html
Copyright © 2011-2022 走看看