异步委托(APM)使用Func异步操作,处理耗时操作

使用委托进行异步操作,处理一些耗时操作,防止主线程阻塞

使用例子:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5
 6 namespace Demo
 7 {
 8     class Program
 9     {
10
11         static void Main(string[] args)
12         {
13             Func<string> fun = new Func<string>(Test);
14             Console.WriteLine("异步执行开始(异步委托的方法):" + fun.Method);
15            IAsyncResult asyncResult= fun.BeginInvoke(CallBack,new string []{"sadha","sahsiuh"});  //开始异步操作
16
17             for (int i = 0; i < 10;i++ )
18             {
19                 Console.WriteLine("异步方法执行时同时执行其它代码:"+i);
20             }
21
22             fun.EndInvoke(asyncResult);  //结束异步
23             Console.ReadKey();
24         }
25
26         /// <summary>
27         /// 异步执行的方法
28         /// </summary>
29         /// <returns></returns>
30         public static string Test()
31         {
32             return DateTime.Now.ToString();
33         }
34
35         /// <summary>
36         /// 异步方法执行完成回掉的方法
37         /// </summary>
38         /// <param name="async"></param>
39         public static void CallBack(IAsyncResult async)
40         {
41             string [] array= async.AsyncState as string [];
42             Console.WriteLine("异步操作是否完成:"+ async.IsCompleted);
43         }
44     }
45 }

上述代码运行结果:

时间: 2024-12-26 11:58:07

异步委托(APM)使用Func异步操作,处理耗时操作的相关文章

C# 1.0 特性之异步委托(AP、APM)

?  前言 C# 异步委托也是属于异步编程中的一种,可以称为 Asynchronous Programming(异步编程)或者 Asynchronous Programming Model(异步编程模型),因为这是实现异步编程的模式.委托是 C#1.0 就有的特性,并且 .NET v1.0 同时也伴随有 AsyncCallback.IAsyncResult 等类/接口的出现,所以所有的 .NET 版本中都是支持的. 1.   什么是异步委托 1)   异步委托是采用异步回调的方式实现异步执行,当

委托、泛型委托、异步委托(新人,有问题请指出,有部分代码是拿其他博客主的)

委托 是把一个方法当作一个参数放到声明(deletgate)委托中.给另一个方法时候,或者直接执行委托. 1 class Delegates 2 { 3 public delegate void mydelegate(string msg); 4 static void Main(string[] args) 5 { 6 mydelegate myd = new mydelegate(father.BuyToys); 7 myd("BBB"); 8 Console.Read(); 9

异步委托

委托实现多窗体传值 主窗体的代码: public partial class FrmMain : Form { //[3] 创建委托对象(委托对象能够将委托和具体方法关联) public ShowCounterDelegate msgSender; public FrmMain() { InitializeComponent(); //创建从窗体对象 FrmOther01 objFrm01 = new FrmOther01(); FrmOther02 objFrm02 = new FrmOthe

创建线程之异步委托

首先定义一个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

01-多线程及异步委托

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

多线程的异步委托初识

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

net .异步委托知识

以前在编程中,异步用的比较少,导致C# 一些基础的 东西用法都不怎么熟悉,经常要用的时候在去查找资料比较被动,而已没真正里面理解起来,始终感觉不是自己的知识 (题外话) 首先委托关键字  Delegate 1) 定义 /// 委托必须和要调用的异步方法有相同的签名 public delegate string AsyncMethodCaller(int callDuration, out int threadId); 2. 异步委托的方法 static string TestMethod(int

异步委托的简单用例

1 //定义一个委托 2 static Func<int, int, string> delFunc = (a, b) => 3 { 4 Console.WriteLine("委托线程:" + Thread.CurrentThread.ManagedThreadId); 5 return (a + b).ToString(); 6 }; 7 8 static void Main(string[] args) 9 { 10 Console.WriteLine("

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

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