方式一: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();
int result = i + j;
return result; }
static void Main(string[] args)
{
del d = new del(add);
IAsyncResult re = d.BeginInvoke(,,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 = ; //使用全局的变量 private static int add(int i, int j)
{
Console.WriteLine("starting task....");
Thread.Sleep();
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(,,new AsyncCallback(TaskFininshed),null); Console.WriteLine("我来自主线程....");
Console.WriteLine("这个时候,主线中的代码,不会被堵塞...."); Console.ReadLine();//异步线程 是属于 后台线程,所以这里要阻止前台线程结束
}
}
}

waiteone的使用滴呀

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 = ; //使用全局的变量 private static int add(int i, int j)
{
Console.WriteLine("starting task....");
Thread.Sleep();
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(,,new AsyncCallback(TaskFininshed),null); Console.WriteLine("我来自主线程....");
Console.WriteLine("这个时候,主线中的代码,不会被堵塞...."); //Console.ReadLine();//异步线程 是属于 后台线程,所以这里要阻止前台线程结束
//这里我们不一定要使用 Console.ReadLine() 来等待异步线程的结束; //我们还可以 使用:
while (!re.AsyncWaitHandle.WaitOne(,false))
{
Console.WriteLine("主线程,在指定的时间内等你回来呀,亲....");
//如果指定时间为0,表示不等待,如果为-1,表示永远等待 } Console.WriteLine("同步 异步 都结束了....");
Console.ReadLine(); /*
*
*
* WaitOne的第一个参数表示要等待的毫秒数,
* 在指定时间之内,WaitOne方法将一直等待,直到异步调用完成,
* 并发出通知,WaitOne方法才返回true。
* 当等待指定时间之后,异步调用仍未完成,WaitOne方法返回false,
* 如果指定时间为0,表示不等待,如果为-1,表示永远等待,直到异步调用完成。
*
* */
}
}
}

再看当waitone的时间设置不一样时候的结果;

net异步线程获取返回值的三种方式的更多相关文章

  1. python执行系统命令后获取返回值的几种方式集合

    python执行系统命令后获取返回值的几种方式集合 今天小编就为大家分享一篇python执行系统命令后获取返回值的几种方式集合,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 第一种情 ...

  2. Java Class类以及获取Class实例的三种方式

    T - 由此 Class 对象建模的类的类型.例如,String.class 的类型是Class<String>.如果将被建模的类未知,则使用Class<?>.   publi ...

  3. 反射:获取Class对象的三种方式

    获取Class对象的三种方式 package lianxiApril18; /** * 获取Class对象的三种方式 * 1 Object ——> getClass(); * 2 任何数据类型( ...

  4. JavaWeb后台从input表单获取文本值的两种方式

    JavaWeb后台从input表单获取文本值的两种方式 #### index.html <!DOCTYPE html> <html lang="en"> & ...

  5. Java反射获取class对象的三种方式,反射创建对象的两种方式

    Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...

  6. 3、获取Class对象的三种方式

    3.获取Class对象的三种方式 要想对字节码文件进行解刨,必须要有字节码文件对象 Object类中的getClass方法 通过对象静态属性 .class来获取对应的Class对象 只要通过给定类的字 ...

  7. js异步执行 按需加载 三种方式

    js异步执行 按需加载 三种方式 第一种:函数引用 将所需加载方法放在匿名函数中传入 //第一种 函数引用 function loadScript(url,callback){ //创建一个js va ...

  8. 反射应用和获取Class对象的三种方式

    一.写一个"框架",可以创建任何对象运行任何方法 1.配置文件 2.使用类加载器ClassLoader,Properties集合是可以和IO流结合使用完成读取和写入数据的集合,方法 ...

  9. 获取Java线程返回值的几种方式

    在实际开发过程中,我们有时候会遇到主线程调用子线程,要等待子线程返回的结果来进行下一步动作的业务. 那么怎么获取子线程返回的值呢,我这里总结了三种方式: 主线程等待. Join方法等待. 实现Call ...

随机推荐

  1. Unix Shell中单引号、双引号字符、反斜杠、反引号的使用[转]

    在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行:对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之.如下,当在命令行中输入:echo *child. ...

  2. iOS下json的解析 NSJSONSerialization

      - (IBAction)JOSNButtonPressed:(id)sender { NSString *str=[@"http://douban.fm/j/mine/playlist? ...

  3. salt-ssh使用

    salt-ssh 是 0.17.0 新出现的一个功能,一听这名字就知道它是依赖 ssh 来进行远程命令执行的工具,好处就是你不需要在客户端安装 minion,也不需要安装 master(直接安装 sa ...

  4. [转] - QThread应用探讨

    QThread 似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用 QThread,随便用google一搜,就能搜出大量结果出来.无怪乎Q ...

  5. JavaScript对下一个元旦倒计时,经常用于网店限时销售

    <div>距离下一个元旦还有多久:</div> <div id="timer"></div> <script type=&qu ...

  6. 自制Chrome拓展

    淘宝试用自动点击: 谷歌其实就是一些html+css+js+静态资源.但是里面有一个特别的配置文件manifest.json.该文件和Android的那个androidmanifest.xml类似,记 ...

  7. Scrum会议4(Beta版本)

    组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...

  8. 连连看的设计与实现——四人小组项目(GUI)

    项目GUI界面经过简单设计,整理如下:(图片截取致宠物连连看3.1) 点开游戏后界面显示: 点击菜单游戏—>初级 后显示 -------------------------- > 当游戏时 ...

  9. 39. 求分数序列前N项和

    求分数序列前N项和 #include <stdio.h> int main() { int i, n; double numerator, denominator, item, sum, ...

  10. sql order by+字段,指定按照哪个字段来排序

    1.我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪中方式来进行排序,再返回搜索结果. 2.SELECT field1, field2,...fieldN table_na ...