方法有三种,我们直接上代码;
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 的参数来进行相关的转换,效果非常好; } } }
完美。