C# -- 等待异步操作执行完成的方式

1. 等待异步操作的完成,代码实现

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Func<int, int> mySum1 = SumNumbers;
 6             Func<int, int> mySum2 = SumNumbers;
 7             Func<int, int> mySum3 = SumNumbers;
 8
 9             AsyncCallback callback = c => Console.WriteLine("线程ID:{0},回调函数执行:{1}",Thread.CurrentThread.ManagedThreadId,c.AsyncState);
10
11
12             IAsyncResult result1= mySum1.BeginInvoke(10000, callback, "第一个异步");
13             IAsyncResult result2= mySum2.BeginInvoke(10000, callback, "第二个异步");
14             IAsyncResult result3= mySum3.BeginInvoke(10000, callback, "第三个异步");
15
16
17             //异步等待方式1:使用EndInvoke
18             int asyc1 = mySum1.EndInvoke(result1);
19             Console.WriteLine("第一个异步已经执行完成,结果:{0}",asyc1);
20
21             //异步等待方式2:使用AsyncWaitHandle.WaitOne,参数-1表示一直等待到执行完成
22             if (result2.AsyncWaitHandle.WaitOne(-1))
23             {
24                 Console.WriteLine("第二个异步执行完成");
25             }
26
27             //异步等待方式3:使用IsCompleted判断
28             while (!result3.IsCompleted)
29             {
30                 Console.WriteLine("第三个异步还在执行中....");
31                 Thread.Sleep(300);
32             }
33             Console.WriteLine("第三个异步执行完成");
34
35             Console.ReadKey();
36         }
37
38         public static int SumNumbers(int count)
39         {
40             int sum = 0;
41             for (int i = 0; i < count; i++)
42             {
43                 sum += i;
44             }
45
46             Thread.Sleep(3000);
47             return sum;
48         }
49     }

2. 代码执行结果:

原文地址:https://www.cnblogs.com/kliine/p/10168334.html

时间: 2024-11-14 13:12:12

C# -- 等待异步操作执行完成的方式的相关文章

python中执行cmd的方式

目前我使用到的python中执行cmd的方式有三种: 1. 使用os.system("cmd") 这是最简单的一种方法,特点是执行的时候程序会打出cmd在Linux上执行的信息.使用前需要import os. [python] view plain copy print? os.system("ls") 2. 使用Popen模块产生新的process 现在大部分人都喜欢使用Popen.Popen方法不会打印出cmd在linux上执行的信息.的确,Popen非常强大,

Oracle查看SQL执行计划的方式

Oracle查看SQL执行计划的方式   获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sql_trace初始化参数 2.通过Autotrace 3.通过explain plan 4.通过dbms_xplan.display_cursor 5.通过dbms_xplan.display_awr 6.通过10046事件 1.通过explain plan 工具 12:24:00 [email

linux shell 创建并发后台执行任务并等待任务执行完成

#!/bin/bash echo "i am main" for i in $(seq 1 5) do { sleep 10; echo "i am $i"; }& done wait http://www.cnblogs.com/dorothychai/archive/2012/10/19/2730374.html linux shell 创建并发后台执行任务并等待任务执行完成

C#执行异步操作的几种方式比较和总结

原文出处: Durow(@Durow)   欢迎分享原创到伯乐头条 0×00 引言 之前写程序的时候在遇到一些比较花时间的操作例如HTTP请求时,总是会new一个Thread处理.对XxxxxAsync()之类的方法也没去了解过,倒也没遇到什么大问题.最近因为需求要求用DevExpress写界面,跑起来后发现比Native控件效率差好多.这才想到之前看到的“金科玉律”:不要在UI线程上执行界面无关的操作,因此集中看了下C#的异步操作,分享一下自己的比较和总结. 0×01 测试方法 IDE:VS2

Jquery等待ajax执行完毕继续执行(断点调试正常,运行异常)

以前写过一个程序,发现用断点调试的时候,一步步的运行,程序是可以的,但是去了断点程序就出现了问题. $(document).ready(function(){ var arra=new Array(); $.post("/getdata",null,function(data){ for(var i=0;i arra.push(data); } }); $("#item").val(data[0]); }); 发现自己犯了一个错误.首先,看一下$.post与$.aj

php 执行计划任务方式之 linux crontab 执行命令

一.crond简介 crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务. Linux下的任务调度分为两类,系统任务调度和用户任务调度. 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘.日志清理等.在/etc目录下有一个crontab文件,这个就是系统任务调

总有一种SQL执行计划绑定方式合适你

需要绑定SQL执行计划常见的几种情况: SQL执行计划突变,导致数据库性能下降,从历史执行计划找一个合理的,进行绑定. SQL无法使用更优的执行计划,且无历史执行计划,可通过hint手工构造的方式,进行绑定. 某些Bug引起优化器生成较差的执行计划.在bug修复前,进行绑定. ORACLE固定执行计划的3种方式: Oracle 9i使用outline (可跨版本10,11g均可使用) Oracle 10g使用sql profile (11g也可使用) Oracle 11g使用sql plan m

C#winform调用外部程序,等待外部程序执行完毕才执行下面代码

1.简单调用外部程序文件(exe文件,批处理等),只需下面一行代码即可 System.Diagnostics.Process.Start(“应用程序文件全路径”); 2.如果要等待调用外部程序执行完毕才执行下面代码,只需要在后面加上WaitForExit()方法 System.Diagnostics.Process.Start(应用程序文件全路径).WaitForExit(); 3.另一种方法:使用实例化方法不使用静态方法 1 Process process = new Process(); 2

让函数执行的各种方式

;(function() { /** * 先声明一个函数. * 注意执行的时候不能直接花括号后面加括号执行,因为解析器会把它当作一个函数声明. * @param {String} msg * @return {[type]} */ function common(msg) { console.info(msg + "先声明函数,再调用!") } /** * 常用执行方式.先声明函数,再用一条语句,并在方法名后加() */ common("常用调用方式,"); /**