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();
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异步线程获取返回值的三种方式的更多相关文章
- python执行系统命令后获取返回值的几种方式集合
python执行系统命令后获取返回值的几种方式集合 今天小编就为大家分享一篇python执行系统命令后获取返回值的几种方式集合,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 第一种情 ...
- Java Class类以及获取Class实例的三种方式
T - 由此 Class 对象建模的类的类型.例如,String.class 的类型是Class<String>.如果将被建模的类未知,则使用Class<?>. publi ...
- 反射:获取Class对象的三种方式
获取Class对象的三种方式 package lianxiApril18; /** * 获取Class对象的三种方式 * 1 Object ——> getClass(); * 2 任何数据类型( ...
- JavaWeb后台从input表单获取文本值的两种方式
JavaWeb后台从input表单获取文本值的两种方式 #### index.html <!DOCTYPE html> <html lang="en"> & ...
- Java反射获取class对象的三种方式,反射创建对象的两种方式
Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...
- 3、获取Class对象的三种方式
3.获取Class对象的三种方式 要想对字节码文件进行解刨,必须要有字节码文件对象 Object类中的getClass方法 通过对象静态属性 .class来获取对应的Class对象 只要通过给定类的字 ...
- js异步执行 按需加载 三种方式
js异步执行 按需加载 三种方式 第一种:函数引用 将所需加载方法放在匿名函数中传入 //第一种 函数引用 function loadScript(url,callback){ //创建一个js va ...
- 反射应用和获取Class对象的三种方式
一.写一个"框架",可以创建任何对象运行任何方法 1.配置文件 2.使用类加载器ClassLoader,Properties集合是可以和IO流结合使用完成读取和写入数据的集合,方法 ...
- 获取Java线程返回值的几种方式
在实际开发过程中,我们有时候会遇到主线程调用子线程,要等待子线程返回的结果来进行下一步动作的业务. 那么怎么获取子线程返回的值呢,我这里总结了三种方式: 主线程等待. Join方法等待. 实现Call ...
随机推荐
- [转载]VC6中的文件后缀
VC文件扩展名 .APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度. .BMP:位图资源文件. .BSC:浏览信息文件,由浏览信息维护工具 ...
- php5全版本绕过open_basedir读文件脚本
这是前段时间写的代码了(http://www.weibo.com/1074745063/ByAPqj7s0),最近一直忙着和几个同学一起做非安全类的创业项目.所以也没拿到JAE.SAE测试一下. 不说 ...
- C#生成日期流水账号
生成类似 LS14120002 private String GenNewOrder() { String newOrder; var orders = LYOrder.Items; String l ...
- [转].net自定义configSections的5个示例
本文转自:http://www.yongfa365.com/item/configuration-configSections-SingleTagSectionHandler-DictionarySe ...
- [APAC]自动发送邮件
$lastMon = ((get-date).AddDays(-7) -split(" "))[0] $lastFri = ((get-date).AddDays(-3) -spl ...
- PAT天梯赛练习题 L3-011. 直捣黄龙(多关键字SPFA+DFS)
L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...
- Spring+Mybatis+MySql+Maven 简单的事务管理案例
利用Maven来管理项目中的JAR包,同时使用Spring在业务处理层进行事务管理.数据库使用MySq,数据处理层使用Spring和Mybatis结合. 本案例代码主要结构如图: 1.数据库脚本 -- ...
- PHP 设计模式 笔记与总结(3)SPL 标准库
SPL 库的使用(PHP 标准库) 1. SplStack,SplQueue,SplHeap,SplFixedArray 等数据结构类 ① 栈(SplStack)(先进后出的数据结构) index.p ...
- UITableview cell 的多选
利用NSMutableDictionary key值 来改变cell的状态 -(void)createUI{ table = [[UITableView alloc]initWithFrame:CG ...
- CodeIgniter 发送邮件
1. 在config目录中增加email.php $config['charset'] = 'utf-8'; $config['wordwrap'] = TRUE; $config['protocol ...