亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

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

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

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

什么是異步編程?

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

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

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

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

///<summary>

///開(kāi)始執(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>委托方法的返回類(lèi)型</returns>

string EndInvoke(IAsyncResult result);


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

///<summary>

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

///</summary>

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

///<summary>

///任務(wù)類(lèi)

///</summary>

public class TaskClass

{

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

  public static int AddTask(int x,int y)

   {

         Console.WriteLine("異步線程(ThreadId={0})開(kāi)始執(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})開(kāi)始執(zhí)行.\n",Thread.CurrentThread.ManagedThreadId);

          AddDel addDel=new AddDel(TaskClass.AddTask);

          int x=123457,y=48759;

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

           Thread.CurrentThread.ManagedThreadId);

        //開(kāi)始執(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()方法后,沒(méi)有阻塞,而是繼續(xù)向下執(zhí)行,而且任務(wù)也確實(shí)由一個(gè)新的線程來(lái)執(zhí)行,任務(wù)執(zhí)行結(jié)束后,調(diào)用回調(diào)方法,在回調(diào)方法中調(diào)用EndInvoke()方法來(lái)獲取任務(wù)執(zhí)行結(jié)果。

總結(jié)

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

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


該文章在 2021/3/3 16:48:44 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(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