方式一: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. (转载)读取xml中的指定节点的值

            /// <summary>         /// 读取xml中的指定节点的值        /// </summary>         private st ...

  2. 在vs2013中配置openGL(绝对可靠 !)

    首先要下载glut.h glut32.dll glut32.lib.(这个在glut-3.7.6-bin的包里面,可以直接下载 ) 然后: glut.h:放到 D:\vs2013\VC\include ...

  3. 支持nmap批量漏洞扫描的script

    NSE脚本,会在NMAP扫描时,通过-sV发现的端口详细信息对应到CVE相应的漏洞: nmap -sS -sV --script=vulscan www.scip.ch -p25 下面是该脚本的说明和 ...

  4. Shell下的正则表达式 (鸟哥私房菜)

    "Open Source" is a good mechanism to develop programs.$ apple is my favorite food.$ Footba ...

  5. UVALive 7297 bfs

    题意 一个小偷偷到了项链 他想知道自己是否可以逃出去 地图中有一个小偷 一个警察 警察有一条狗 一开始 小偷和警察的移动速度都是1 当警察走到小偷经过过的地方时 警察会有一条狗嗅到小偷的气味并且以2的 ...

  6. 关于在TP的各类标签中的注意事项

    name的位置上的变量是不用加$的 value位置上的变量是要加$的 <eq name="volist.id" value="$Think.post.id" ...

  7. Yii源码阅读笔记(八)

    前面阅读了Yii2的两个基本类Object和Component,了解了Yii的三个重要概念属性.事件.行为,下面开始阅读Event类,Event类是所有事件类的基类: <?php /** * @ ...

  8. TCPdump抓包命令详解--摘

    http://blog.csdn.net/s_k_yliu/article/details/6665673/ http://starsliao.blog.163.com/blog/static/890 ...

  9. [转]SQLBulkCopy使用

    SQLBulkCopy,用于数据库之间大批量的数据传递.通常用于新,旧数据库之间数据的更新.即使表结构完全不同,也可以通过字段间的对应关系,顺利的将数据导过来. 首先,SQLBulkCopy需要2个连 ...

  10. Android获取手机制作商,系统版本等

    在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息. android.os.Build类中.包括了这样的一些信息.我们可以直接调用 而不需要添加任何的权限和 ...