zoukankan
html css js c++ java
异步方式调用同步方法
一段异步方式调用同步方法代码
执行顺序 执行主程序>>执行异步调用>>执行
WaitOne()后代码>>执行回调>>执行主程序
using
System.Text;
using
System.Data;
using
System.Data.SqlClient;
using
System.Collections;
using
System.Threading;
using
System.IO;
using
System.Runtime.InteropServices;
using
System;
using
System.Runtime.Remoting.Messaging;
namespace
Program
{
public
class
Programmers
{
public
static
void
Main(
string
[] args)
{
Programmers pr
=
new
Programmers();
Console.WriteLine(
"
开始执行
..
"
);
pr.smork();
Thread.Sleep(
1000
);
//
注释掉结果有点不同
Console.WriteLine(
"
我是主线程
"
);
Console.ReadLine();
}
delegate
void
mydelegate();
private
void
smork()
{
/**/
///
异步方式调用同步方法1
AsyncCallback mycallback
=
new
AsyncCallback(tellyou);
//
(回调函数)
mydelegate mdg
=
new
mydelegate(move);
IAsyncResult result
=
mdg.BeginInvoke(mycallback,
null
);
result.AsyncWaitHandle.WaitOne();
//
等待异步完成
Console.WriteLine(
"
异步调用后
"
);
MyRegion
#region
MyRegion
//
异步方式调用同步方法2
//
AsyncCallback mycallback = new AsyncCallback(tellyou);
//
mydelegate mdg = new mydelegate(move);
//
IAsyncResult result = mdg.BeginInvoke(mycallback, null);
//
while (!result.IsCompleted)
//
{
//
//
Thread.Sleep(50);
//
不要与要有区别
//
}
/**/
///
/ 异步方式调用同步方法3(没有回调函数)
//
mydelegate mdg = new mydelegate(move);
//
IAsyncResult result = mdg.BeginInvoke(null, null);
//
while (!result.IsCompleted)
//
{
//
//
Thread.Sleep(60);
//
}
//
mdg.EndInvoke(result);
//
停止调用
//
异步方式调用同步方法4(没有回调函数)
//
mydelegate mdg = new mydelegate(move);
//
IAsyncResult result = mdg.BeginInvoke(null, null);
//
result.AsyncWaitHandle.WaitOne();
//
mdg.EndInvoke(result);
//
停止调用
#endregion
}
public
void
move()
{
for
(
int
i
=
0
; i
<
5
; i
++
)
{
Console.WriteLine(
"
异步任务执行
"
);
Thread.Sleep(
1000
);
}
}
public
void
tellyou(IAsyncResult result)
//
回调函数
{
//
Console.WriteLine("异步任务完成");
//
当异步完成后输出结果 通知已经异步完了
AsyncResult asyncResult
=
result
as
AsyncResult;
mydelegate mydelegate
=
asyncResult.AsyncDelegate
as
mydelegate;
mydelegate.EndInvoke(result);
if
(result.IsCompleted)
{
Console.WriteLine(
"
异步任务完成
"
);
}
}
}
}
查看全文
相关阅读:
Linux系统编程之--守护进程的创建和详解【转】
【转】Android虚拟平台的编译和整合
【转】6.4.6 将驱动编译进Linux内核进行测试
【转】Linux驱动模块编译进内核中
【转】Android HAL实例解析
【转】ubuntu下解压缩zip,tar,tar.gz和tar.bz2文件
【转】Linux下tar.xz结尾的文件的解压方法--不错
【转】linux tree命令以树形结构显示文件目录结构 ---- 不错
【转】NDK编译可执行文件在Android L中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。------不错
【转】Notepad++ 快捷键 大全 官方整理过来的
原文地址:https://www.cnblogs.com/xiaobaigang/p/927920.html
最新文章
mac安装热更新插件
TCMalloc:线程缓冲的Malloc
c++类型所占的字节和表示范围
Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固
【D3.js】Focus + Context 折线图
Solr In Action 中文版 第一章(三)
ASP.NET MVC中使用jQuery时的浏览器缓存问题
Android应用程序窗体设计框架介绍
【TCP/IP】IP路由选择
为什么代理属性设置成assign为了防止生成保留环来
热门文章
C#中SortedList类的使用
Linux内存管理--虚拟地址、逻辑地址、线性地址和物理地址的区别(二)【转】
Linux内存管理--虚拟地址、逻辑地址、线性地址和物理地址的区别(一)【转】
多进程和线程的区别【转】
Linux内核分析--内核中的数据结构双向链表续【转】
进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别【转】
Linux写时拷贝技术【转】
线程、进程和程序的简单比较【转】
文件IO和标准IO的区别【转】
孤儿进程与僵尸进程的区别【转】
Copyright © 2011-2022 走看看