当前位置: 移动技术网 > IT编程>开发语言>.net > 异步多线程 Async

异步多线程 Async

2019年02月24日  | 移动技术网IT编程  | 我要评论

黄金岛官方下载2012,常德不孕不育医院,robot.txt

进程:进程是一个程序在电脑运行时,全部资源的合集叫进程
线程:是程序的最小执行单位,包含计算资源,任何一个操作的响应都是线程完成的。
 
多线程:多个线程并发执行
 
thread 是.net框架封装的一个类,描述线程的东西
 
同步和异步都是描述方法的,所以需要使用委托。
 
同步方法:发起一个调用,一定等着计算结束才运行下一行。
异步方法:发起一个调用,并不等计算结束,而是直接运行下一行,刚才的计算,会启动一个新的线程去执行
 
用委托的begininvoke()方法  begininvoke里面三个参数(第一个参数是传入值,回调函数,操作标识)
 
举例说明
同步方法:请客吃饭,一定等客人到了才吃饭
异步方法:请客吃饭,边吃 边等
 
异步多线程: 多线程说的是clr线程, 异步是io线程
 
多线程调试不要用断点调试,因为每次都是不同的线程,多线程推荐用日志,或者打印控制台
 
 
同步和异步的区别:
 
1.同步方法卡页面,因为ui线程忙于计算,异步多线程方法不卡界面,主线程闲置,计算任务交给子线程在做。
 
2.同步方法慢,只有一个线程计算,异步多线程方法快,多个线程并发计算,多线程的资源消耗更多,线程并不是越多越好 
(资源有限,管理线程也消耗资源)
3、异步多线程是无序的,启动无序,执行时间不确定,结果无序。所以不要试图通过启动顺序,或者时间等待来控制流程
 
 
 
回调函数:用于多线程完成之后执行的方法
asynccallback   callback = ar=> console.writeline("执行回调函数");
 
 
public delegate void asynccallback(iasyncresult ar);回调函数是这个委托
 
 
案例:
/// <summary>
/// 耗时方法
/// </summary>
/// <param name="name"></param>
private void dosomething(string name)
{
console.writeline($"开始执行{name}, {thread.currentthread.managedthreadid.tostring("00")} ,{datetime.now}");
int num = 1;

for (int i = 0; i < 100000000; i++)
{
num++;
}
thread.sleep(1000);

console.writeline($"结束执行{name}, {thread.currentthread.managedthreadid.tostring("00")} ,{datetime.now},{num}");
}
 
 
/// <summary>
/// 同步方法 按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_click(object sender, eventargs e)
{
action<string> act = this.dosomething;

for (int i = 0; i < 5; i++)
{
act.invoke("button1_click");
}
console.writeline("计算之后干什么");
}
 
/// <summary>
/// 异步方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_click(object sender, eventargs e)
{
action<string> act = this.dosomething;

asynccallback asynccallback = ar => console.writeline("回调函数"); //回调函数
iasyncresult result = null;
for (int i = 0; i < 5; i++)
{
result = act.begininvoke("button2_click", asynccallback, "小猪");
}
act.endinvoke(result);
}
 
 
 
 
 
 
 
 
 
下面这个是做假的上传等待操作
action<string> atc = this.dosomething;

iasyncresult iasyncresult = atc.begininvoke("上传文件", ar => console.writeline("执行回调函数"), null);
int i = 1;
while (!iasyncresult.iscompleted)
{
if (i < 10)
{
console.writeline($"文件上传{i++ * 10}");
}
else
{
console.writeline($"已完成99%....马上结束");
}
thread.sleep(100);
}
console.writeline("上传完成");

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网