线程开启方法之一——异步委托

 1  class Program
 2     {
 3        private static void Text1()
 4         {
 5          Console.Write("这是TEXT1程序");
 6         }
 7   static void Main(string[] args)
 8         {
 9             Action a = Text1;
10             a.BeginInvoke(null,null);//用beginInvoke方法开个一个新的线程
11             Console.Write("这是主进程");
12             Console.ReadKey();
13        }
14 }

运行最终结果如上图,一般按顺序执行是先显示TEXT1方法的内容再显示main方法的内容,而异步执行显示的结果是不一样的

2.如果运用有返回值的委托方法,代码如下

 1   private static int Text2(int a,string b)
 2         {
 3             Console.Write("这是Text2程序");
 4             Thread.Sleep(100);//让这个方法暂停0.1秒
 5             return 200;
 6         }
 7  static void Main(string[] args)
 8         {
 9            Func<int,string,int> a = Text2;//用Func来进行委托
10            IAsyncResult result= a.BeginInvoke(30,"pnzpb",null, null);//定义一个iasyncResult变量来存储a得到的值
11             Console.WriteLine("这是主程序");
12             //如果a这个方法还没执行完,iscompleted为false
13             if (result.IsCompleted == false)
14             {
15                 Console.Write(".");
16                 Thread.Sleep(10);//控制子线程的监测频率
17             }
18             int res= a.EndInvoke(result);//定义一个int变量才存储最终得到的值
19             Console.WriteLine(res);
20             Console.ReadKey();
21
22         }
23     

结果如图,"."表示方法还没异步执行的线程还没有执行完,执行完毕之后输出设置好的返回值“200”

时间: 2024-10-11 07:17:56

线程开启方法之一——异步委托的相关文章

C# 多线程操作之异步委托

标签: 多线程任务nullstringhtml工作 2012-06-29 23:00 1276人阅读 评论(0) 收藏 举报  分类: C/C++/C#/dotnet(126)  目录(?)[+] 在应届生找工作的时候,多线程操作几乎是所有的公司都会问及的一个基本问题. 这里做了一个多线程操作的总结,这里总结了通过异步委托来实现多线程操作. 定义一个委托,是创建一个线程的最简单的方法,并且异步调用它.委托是方法的类型安全的引用.同时委托还智齿异步调用方法. 委托使用线程池来完成异步任务. 当自己

多线程的异步委托初识

异步委托的的原理就是使用了一个线程池去执行了一个委托指向的方法 EndInvoke会阻塞当前主线程,直到异步委托执行完成之后,才能继续向下执行 示例代码如下: static void Main(string[] args) { //这里写了一个泛型委托,前两个是传递的参数,后一个是返回值,这个泛型委托调用的是AddMethod方法 Func<int, int, int> delFun = new Func<int, int, int>(AddMethod); //这里是开始异步的调

01-多线程及异步委托

一.多线程: 1.概念: 线程:是Windows任务调度的最小单位.线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数. 多线程:是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行执行的线程来完成各自的任务. 2.为什么要用多线程: ①让计算机"同时"做多件事情,节约时间. ②多线程可以让一个程序“同时”处理多个事情. ③后台运行程序,

C#基础之--线程、任务和同步:一、异步委托

创建线程的一种简单方式是定义一个委托,并异步调用它.委托是方法的类型安全的引用. Delegate还支持异步地调用方法.在后台Delegate类会创建一个执行任务的线程. 为了说明委托的异步特性,从一个需要一定的时间才能执行完毕的方法开始. TakesAWhile方法至少需要经过第2个变量传递的毫秒数才能执行完,因 为它调用了Thread.Sleep()方法. static int TakesAWhile(int data, int ms) { Console.WriteLine("TakesA

使用异步委托执行线程(delegate)

由于异步委托产生的线程与应用程序主线程是分开执行的,若主线程要获取异步委托线程的结果,则主线程需要等待异步委托的执行结果. BeginInvoke是Delegate类型的一个方法,它的返回类型为IAsyncResult,通过该接口,可以获得异步委托的执行信息. 1.投票技术:等待异步委托结果的一种方法是投票技术,该技术的实现原理是通过IAsyncResult接口的IsComplete属性来检查委托是否完成了任务.EndInvote方法获取执行结果.举个例子,如下: 执行后的效果: 2.访问等待句

创建线程之异步委托

首先定义一个runtaketime委托: public delegate int runtaketime(int data,int ms); 定义一个静态的方法,参数,返回类型和定义的委托一样 static public int taketime(int data, int ms) { Console.WriteLine("time begin!"); Thread.Sleep(ms); Console.WriteLine("time end!"); return

dispatch_sync: 同步,不具备开启线程的能力 dispatch_async:异步,具备开启线程的能力

dispatch_sync: 同步,不具备开启线程的能力 dispatch_async:异步,具备开启线程的能力 并发队列:多个任务可以同时执行 穿行队列:一个任务执行完后,再执行下一个任务. core foundation 和foundation 框架之间的数据转换需要桥接 _bridge   NSstring   CFstring 导航控制器 push 进入到下一个控制器 xib 里面不要放多个对象 ,可能会返回程别的对象    [对象 superview]:可能会出错    xib一般用来

c#并行任务多种优化方案分享(异步委托)

遇到一个多线程任务优化的问题,现在解决了,分享如下. 假设有四个任务: 任务1:登陆验证(CheckUser) 任务2:验证成功后从Web服务获取数据(GetDataFromWeb) 任务3:验证成功后从数据库获取数据(GetDatFromDb) 任务4:使用2.3的数据执行一个方法 (StartProcess) 一个比较笨的方法(本人最开始的方法,记为方法1)是直接开启一个线程,按照顺序依次执行四个任务: new Thread(delegate                {        

Net线程间通信的异步机制

线程间通信 我们看下面的图 我们来看线程间通信的原理:线程(Thread B)和线程(Thread A)通信, 首先线程A 必须实现同步上下文对象(Synchronization Context), 线程B通过调用线程A的同步上下文对象来访问线程A,所有实现都是在同步上下文中完成的.线程B有两种方式来实现线程间的通信. 第一种:调用线程A的同步上下文对象,阻碍当前线程,执行红色箭头调用,直到黄色箭头返回(同步上下文执行完毕)才释放当前线程. (1->2->3->5) 第二种:调用线程A的