net异步线程获取返回值的两种方式
Posted 咕咚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了net异步线程获取返回值的两种方式相关的知识,希望对你有一定的参考价值。
方式一:endInvoke
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ConsoleApplication6 { //调用异步方法,并返回值: //方式一,采用轮训的方式; //申明一个委托; public delegate int del(int a,int b); class Program { private static int add(int i, int j) { Console.WriteLine("starting task...."); Thread.Sleep(2000); int result = i + j; return result; } static void Main(string[] args) { del d = new del(add); IAsyncResult re = d.BeginInvoke(10,12,null,null); while (!re.IsCompleted) { Console.WriteLine("异步线程进行中...."); } int result = d.EndInvoke(re); Console.WriteLine("result:"+result); Console.ReadLine(); } } }
方式二:回调函数
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ConsoleApplication6 { class Program { public delegate int del(int a,int b); static del d; static double result = 0; //使用全局的变量 private static int add(int i, int j) { Console.WriteLine("starting task...."); Thread.Sleep(2000); int result = i + j; return result; } private static void TaskFininshed(IAsyncResult ias) { result=d.EndInvoke(ias); Console.WriteLine("我来自异步线程..."); Console.WriteLine("异步结束!输出结果"); Console.WriteLine(result); } static void Main(string[] args) { d= new del(add); IAsyncResult re = d.BeginInvoke(10,12,new AsyncCallback(TaskFininshed),null); Console.WriteLine("我来自主线程...."); Console.WriteLine("这个时候,主线中的代码,不会被堵塞...."); Console.ReadLine();//异步线程 是属于 后台线程,所以这里要阻止前台线程结束 } } }
以上是关于net异步线程获取返回值的两种方式的主要内容,如果未能解决你的问题,请参考以下文章