频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
异步多线程 Async - H哥努力啊 - 博客园
2019-04-09 13:22:16         来源:H哥努力啊  
收藏   我要投稿

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

///
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}");
} ///
/// 同步方法 按钮
///

///
///
private void button1_Click(object sender, EventArgs e)
{
Action act = this.DoSomeThing;

for (int i = 0; i < 5; i++)
{
act.Invoke("button1_Click");
}
Console.WriteLine("计算之后干什么");
} ///
/// 异步方法
///

///
///
private void button2_Click(object sender, EventArgs e)
{
Action 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 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("上传完成");

点击复制链接 与好友分享!回本站首页
相关TAG标签 Async - - 博客园
上一篇:jQueryMobile 網頁使用 ASP.NET Web API 服務 - WizardWu - 博客园
下一篇:WPF触发器(Trigger) - DataTrigger - Laggage - 博客园
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站