zoukankan
html css js c++ java
(三)线程等待句柄
(一).描述
本示例代码实现线程等待等待执行,比如一个线程在执行之前要等待所有其它线程或某个线程
先执行完成,或者等待其它线程至少一个执行完成.
(二).代码
using
System;
using
System.Runtime.Remoting.Messaging;
using
System.Threading;
namespace
等待句柄
{
//
委托声明(函数签名)
delegate
string
MyMethodDelegate();
class
MyClass
{
//
要调用方法1
public
string
Write1()
{
for
(
double
i
=
0
; i
<
100000000000
;i
++
)
//
此数值大小可以根据自己的环境修改,
//
目的是让此方法延长时间而已
{
//
延长时间(模拟实际任务)
}
Console.WriteLine(
"
执行方法1
"
);
return
""
;
}
//
要调用方法2
public
string
Write2()
{
Console.WriteLine(
"
执行方法2
"
);
return
"
22222222222222
"
;
}
//
要调用方法3
public
string
Write3()
{
Console.WriteLine(
"
执行方法3
"
);
return
"
33333333333333
"
;
}
[STAThread]
static
void
Main(
string
[] args)
{
MyClass myClass
=
new
MyClass();
MyMethodDelegate d1
=
new
MyMethodDelegate(myClass.Write1);
MyMethodDelegate d2
=
new
MyMethodDelegate(myClass.Write2);
MyMethodDelegate d3
=
new
MyMethodDelegate(myClass.Write3);
AsyncResult myResult1,myResult2,myResult3;
//
此类封闭异步委托异步调用的结果,通过AsyncResult得到结果.
myResult1
=
(AsyncResult)d1.BeginInvoke(
null
,
null
);
//
调用
myResult2
=
(AsyncResult)d2.BeginInvoke(
null
,
null
);
myResult3
=
(AsyncResult)d3.BeginInvoke(
null
,
null
);
//
建立WaitHandle数组对象
WaitHandle[] waitHandle
=
new
WaitHandle[
3
]
{myResult1.AsyncWaitHandle,myResult2.AsyncWaitHandle,myResult3.AsyncWaitHandle}
;
/**/
/*
try
{
//等待三个异步方法中的至少一个执行完成,才继续执行下面的语句
WaitHandle.WaitAny(waitHandle);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
*/
myResult1.AsyncWaitHandle.WaitOne();
//
如果当前异步方法还没有完成,此异步方法执行完毕才往下执行
myResult2.AsyncWaitHandle.WaitOne();
myResult3.AsyncWaitHandle.WaitOne();
/**/
/*
myResult1.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1),false); //如果当前异步方法还没有完成,则等待一秒的时间执行此方法; 如果一秒后此方法还未完成的话,则不再等待,继续往下执行
myResult2.AsyncWaitHandle.WaitOne();
myResult3.AsyncWaitHandle.WaitOne();
*/
Console.WriteLine(
"
测试等待句柄
"
);
//
标记语句用.
Console.Read();
}
}
}
查看全文
相关阅读:
HDU_1242_Rescue
HDU_1175_连连看
HDU_1072_Nightmare
HDU_2544_最短路
POJ_2195_Going Home
POJ_3565_Ants
KM算法(Kuhn-Munkres)
POJ_2536_Gopher II
ODATA 云驱动 http://www.cdata.com/cloud/
Wijmo 5 与Breeze 的组合,及与METRONIC 的集成
原文地址:https://www.cnblogs.com/engine1984/p/862972.html
最新文章
使用ListView时遇到的问题
设计模式学习--------2.观察者模式
设计模式学习--------1.组合模式学习
nagios监控oracle
Linux系统管理常用命令
TOP命令各个参数代表意义详解
kickstart批量装机脚本
Linux初始化脚本
index
关于OEM
热门文章
oracle开机自启动、监听自启动设置
Oracle9i安装
auditing
oracle 10g 32位 快速安装
登陆iSQLPlus的设置方法(转)
如何简化 Oracle Linux 上 Oracle Database 的安装
controlfile
execution plan
codeforces_455B
HDU_1548_A strange lift
Copyright © 2011-2022 走看看