c#实现异步编程的方法

  

最近在我参与的几个。net项目中都有用到异步编程,作为一名。net小白,很有必要好好地学习一下c#异步编程。

  

<强>什么是异步

  

异步指的就是不用阻塞当前线程来等待任务的完成,而是将任务扔到线程池中去执行,当前线程可以继续向下执行,直至其它线程将任务完成,并回调通知当前线程。整个任务从开始到结束都是异步完成的,不会阻塞当前线程,因此,异步很重要的一点就是,不会阻塞当前线程。

  

<>强实现异步编程

  

在c#语言中,主要是通过委托来实现异步编程的,在委托类型中定义了两个方法BeginInvoke()和EndInvoke ()。

     ///& lt; summary>///开始执行异步操作。///& lt;/summary>///& lt;参数name=安问痹谖蟹椒ǖ牟问? lt;/param>///& lt;参数name=盎氐鳌弊4? lt;/param>///& lt;参数name="对象"祝辞& lt;/param>///& lt; returns> & lt;/returns>   IAsyncResult BeginInvoke (int参数、AsyncCallback回调对象@object);///& lt; summary>///结束执行异步操作,并且返回异步操作结果。///& lt;/summary>///& lt;参数name=敖峁弊4? lt;/param>///& lt; returns>委托方法的返回类型& lt;/returns>   字符串EndInvoke (IAsyncResult结果);      之前      

下面就通过一段代码来具体实现异步编程

     ///& lt; summary>///定义一个委托类型///& lt;/summary>   公众代表字符串德尔();///& lt; summary>///任务类///& lt;/summary>   公开课TaskClass   {   公共静态字符串SleepTask ()   {   控制台。WriteLine(“异步线程(ThreadId={0})开始执行睡眠任务,睡眠3 s。\ n”, Thread.CurrentThread.ManagedThreadId);      thread . sleep (3000);      控制台。WriteLine(“异步线程(ThreadId={0})苏醒,睡眠任务执行结束。\ n”, Thread.CurrentThread.ManagedThreadId);      返回“异步线程执行成功。\ n”;   }   }///& lt; summary>///异步编程实现类(主线程不会阻塞)///& lt;/summary>   公开课AsynCallbackClass   {   公共静态字符串结果;      公共静态void Main (string [] args)   {   控制台。WriteLine(“主线程(ThreadId={0})开始执行。\ n”, Thread.CurrentThread.ManagedThreadId);      德尔德尔=new德尔(TaskClass.SleepTask);      控制台。WriteLine(“主线程(ThreadId={0})调用BeginInvoke()方法执行异步任务。\ n”, Thread.CurrentThread.ManagedThreadId);//开始执行异步操作,TaskClass.SleepTask无参数,回调为定义的回调方法。   德尔。BeginInvoke(调零);      控制台。WriteLine(“主线程(ThreadId={0})继续执行。\ n”, Thread.CurrentThread.ManagedThreadId);      thread . sleep (5000);//输出异步任务返回的结果   Console.WriteLine(结果);      控制台。WriteLine(“主线程(ThreadId={0})执行结束。\ n”, Thread.CurrentThread.ManagedThreadId);   }///& lt; summary>///回调方法///& lt;/summary>///& lt;参数name=癮r”祝辞& lt;/param>   公共静态空回调(IAsyncResult ar)   {   AsyncResult AsyncResult=ar AsyncResult;      如果(asyncResult==null){返回;}      德尔德尔=asyncResult。AsyncDelegate Del;      如果(del==null){返回;}      Console.WriteLine(“回调方法中调用EndInvoke()方法,获取异步任务结果。\ n”, Thread.CurrentThread.ManagedThreadId);//结束执行异步操作,并返回异步任务结果。   结果=del.EndInvoke (ar);   }   }   之前      

运行结果:

  

 C #实现异步编程的方法

  

从运行结果中,我们可以发现主线程在调用了BeginInvoke()方法后,没有阻塞,而是继续向下执行,而且任务也确实由一个新的线程来执行,任务执行结束后,调用回调方法,在回调方法中调用EndInvoke()方法来获取任务执行结果。

  

<强>总结

  

1。在异步编程中,当前线程是不会被阻塞的。

  

2。c#的委托机制可以很方便地实现异步编程。

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

c#实现异步编程的方法