方式一: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. USACO 5.4 Telecowmunication(最大流+枚举)

    面对最小割之类的题目,完全木想法... 枚举+最大流..复杂度很大了...居然很快的就过了.. /* ID: cuizhe LANG: C++ TASK: telecow */ #include &l ...

  2. Mysql_mysql 性能分析及explain用法

    1 使用explain语句去查看分析结果,如  explain select * from test1 where id=1;会出现:id  selecttype  table  type possi ...

  3. IntelliJ IDEA 14 SVN无法正常使用问题

    通过SVN导入项目 SVN checkout时候会出现如下错误: Cannot run program "svn" (in directory "E:\Projects& ...

  4. 简单Qt网络通信

    最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信. 1.UDP通信 UDP没有特定的server端和cl ...

  5. yii uploadfile 错误提示: fileinfo php extension is not installed

    rule规则里面增加 'checkExtensionByMimeType'=>false,

  6. Memcached 笔记与总结(4)memcache 扩展的使用

    在 wamp 环境下进行测试:WAMPSERVER 2.2(Windows 7 + Apache 2.2.21 + PHP 5.3.10 + memcache 3.0.8 + Memcached 1. ...

  7. python 使用多线程进行压力测试

    #coding=utf-8 import urllib2 import threading import time TOTAL = 0 #总数 SUCC = 0 #响应成功数 FAIL = 0 #响应 ...

  8. Yii源码阅读笔记(十一)

    controller类的render部分,用于渲染视图和布局文件: /** * Returns all ancestor modules of this controller. * 获取当前控制器所有 ...

  9. Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单

    代码: <div class='container-fluid'> <h2 class='page-header'>导航</h2> <!-- .navrbar ...

  10. px_ipc_name.c

    /* include px_ipc_name */ #include "unpipc.h" char * px_ipc_name(const char *name) { char ...