狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

使用C#委托來實(shí)現(xiàn)異步編程

admin
2021年3月3日 16:48 本文熱度 2460

什么是異步編程?

異步編程指的就是不用阻塞當(dāng)前線程來等待任務(wù)的完成,而是將任務(wù)扔到線程池中去執(zhí)行,當(dāng)前線程可以繼續(xù)向下執(zhí)行,直至其它線程將任務(wù)完成,并回調(diào)通知當(dāng)前線程。

整個(gè)任務(wù)從開始到結(jié)束都是異步完成的,不會(huì)阻塞當(dāng)前線程。因此,異步編程很重要的一點(diǎn)就是,不會(huì)阻塞當(dāng)前線程。

異步編程實(shí)現(xiàn)

 在C#語言中,通過委托可以很方便地實(shí)現(xiàn)異步編程,在委托類型中定義了兩個(gè)方法BeginInvoke()和EndInvoke()

///<summary>

///開始執(zhí)行異步操作

///</summary>

///<param name="param">委托方法的參數(shù)</param>

///<param name="callback"></param>

///<param name="object"></param>

///<returns></returns>

IAsyncResult BeginInvoke(int param,AsyncCallback callback,Object  

@object);

///<summary>

///結(jié)束執(zhí)行異步操作,并且返回異步操作結(jié)果

///</summary>

///<returns>委托方法的返回類型</returns>

string EndInvoke(IAsyncResult result);


下面就通過一段代碼來具體實(shí)現(xiàn)異步編程:

///<summary>

///定義一個(gè)委托類型

///</summary>

public delegate int AddDel(int x,int y);

///<summary>

///任務(wù)類

///</summary>

public class TaskClass

{

   //計(jì)算任務(wù)

  public static int AddTask(int x,int y)

   {

         Console.WriteLine("異步線程(ThreadId={0})開始執(zhí)行計(jì)算任務(wù).\n",Thread.CurrentThread.ManagedThreadId);

         Console.WriteLine("異步線程(ThreadId={0})計(jì)算中...\n",Thread.CurrentThread.ManagedThreadId);

          Thread.Sleep(3000);

           int result=x+y;

           Console.WriteLine("異步線程(ThreadId={0})結(jié)束執(zhí)行計(jì)算任務(wù).\n",Thread.CurrentThread.ManagedThreadId);

            return result;

}

}

///<summary>

///實(shí)現(xiàn)異步編程,主線程不會(huì)阻塞

///</summary>

public class AsynCallbackClass

{

    public static int result;

   public static void Main(string[] args)

     {

          Console.WriteLine("主線程(ThreadId={0})開始執(zhí)行.\n",Thread.CurrentThread.ManagedThreadId);

          AddDel addDel=new AddDel(TaskClass.AddTask);

          int x=123457,y=48759;

          Console.WriteLine("主線程(ThreadId={0})調(diào)用BeginInvoke()方法開始執(zhí)行異步操作.\n",

           Thread.CurrentThread.ManagedThreadId);

        //開始執(zhí)行異步操作,Callback為定義的回調(diào)方法

addDel.BeginInvoke(x,y,Callback,null);

         Console.WriteLine("主線程(ThreadId={0})繼續(xù)執(zhí)行...\n",Thread.CurrentThread.ManagedThreadId);

         Thread.Sleep(5000);

//輸出計(jì)算任務(wù)返回的結(jié)果

         Console.WriteLine("計(jì)算結(jié)果:{0}+{1}={2}.\n",x,y,result);

          Console.WriteLine("主線程(ThreadId={0})執(zhí)行結(jié)束.\n",Thread.CurrentThread.ManagedThreadId);

  }

         ///<summary>

         ///回調(diào)方法

          ///</summary>

         ///<param name="ar"></param>

         public static void Callback(IAsyncResult ar)

         {

                AsyncResult asyncResult=ar as AsyncResult;

             if(asyncResult ==null){

                return;}

               AddDel addDel=asyncResult.AsyncDelegate as AddDel;

              if(addDel==null){return;}

            Console.WriteLine("回調(diào)方法中調(diào)用EndInvoke()方法結(jié)束執(zhí)行異步操作,獲取計(jì)算任務(wù)結(jié)果.\n",Thread.CurrentThread.ManagedThreadId);

 //結(jié)束執(zhí)行異步操作,并返回計(jì)算任務(wù)結(jié)果

result=addDel.EndInvoke(ar);

}

}


運(yùn)行結(jié)果:


從運(yùn)行結(jié)果中,我們可以發(fā)現(xiàn)主線程在調(diào)用了BeginInvoke()方法后,沒有阻塞,而是繼續(xù)向下執(zhí)行,而且任務(wù)也確實(shí)由一個(gè)新的線程來執(zhí)行,任務(wù)執(zhí)行結(jié)束后,調(diào)用回調(diào)方法,在回調(diào)方法中調(diào)用EndInvoke()方法來獲取任務(wù)執(zhí)行結(jié)果。

總結(jié)

1. 在異步編程中,當(dāng)前線程是不會(huì)被阻塞的。

2. C#的委托機(jī)制可以很方便地實(shí)現(xiàn)異步編程。


該文章在 2021/3/3 16:48:44 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved