C 實現非同步程式設計的方法

2022-09-26 04:00:13 字數 2261 閱讀 1209

最近在我參與的幾個.net專案中都有用到非同步程式設計,作為一名.net小白,很有必要好好地學習一下c#非同步程式設計。

什麼是非同步

非同步指的就是不用阻塞當前執行緒來等待任務的完成,而是將任務扔到執行緒池中去執行,當前執行緒可以繼續向下執行,直至其它執行緒將任務完成,並**通知當前執行緒。整個任務從開始到結束都是非同步完成的,不會阻塞當前執行緒。因此,非同步很重要的一點就是,不會阻塞當前執行緒。

實現非同步程式設計

在c#語言中,主要是通過委託來實現非同步程式設計的,在委託型別中定義了兩個方法begininvoke()和endinvoke()。

///

/// 開始執行非同步操作.

///

/// 委託方法的引數

///

///

///

iasyncresult begininvoke(int param, asynccallback callback, object @object);

///

/// 結束執行非同步操作,並且返回非同步操作結果.

///

///

/// 委託方法的返回型別

string endinvoke(iasyncresult result);

下面就通過一段**來具體實現非同步程式設計

///

/// 定義乙個委託型別

///

public delegate string del();

///

/// 任務類

///

public class taskclass

)開始執行睡眠任務,睡眠3s.\n", thread.currentthread.managedthreadid);

thread.sleep(3000);

console.writeline("非同步執行緒(threadid = )甦醒,睡眠任務執行結束.\n", thread.currentthread.managedthreadid);

return "非同步執行緒執行成功.\n";

}}///

/// 非同步程式設計實現類(主線程不會阻塞)

///

public class asyncallbackclass

)開始執行.\n", thread.currentthread.managedthreadid);

de del = new del(taskclass.sleeptask);

console.writeline("主線程(threadid = )呼叫begininvoke()方法執行非同步任務.\n", thread.currentthread.managedthreadid);

//開始執行非同步操作,taskclass.sleeptask無引數,callback為定義的**方法.

del.begininvoke(callback, null);

console.writeline("主線程(threadid = )繼續執行.\n", thread.currentthread.managedthreadid);

thread.sleep(5000);

//輸出非同步任務返回的結果

console.writeline(result);

console.writeline("主線程(threadid = )執行結束.\n", thread.currentthread.managedthreadid);

} ///

/// **方法

///

///

public static void c ar)

del del = asyncresult.asyncdelegate as del;

if (del == null)

console.wrwww.cppcns.comiteline("**方法中呼叫endinvoke()方法,獲取非同步任務結果.pjefulyun", thread.currentthread.managedthreadid);

//結束執行非同步操作,並返回非同步任務結果.

result = del.endinvoke(ar);

}}執行結果:

從執行結果中,我們可以發現主線程在呼叫了begininvoke()方法後,沒有阻塞,而是繼續向下執行,而且任務也確實由乙個新的執行緒來執行,任務執行結束後,呼叫**方法,在**方法中呼叫endinvoke()方法來獲取任務執行結果。

總結1. 在非同步程式設計中,當前執行緒是不會被阻塞的。

2. c#的委託機制可以很方便地實現非同步程式設計。

本文標題: c#實現非同步程式設計的方法

本文位址:

PHP程式設計實現指令碼非同步執行的方法

php語言得用fsockopen 函式,實現指令碼非同步執行,如下 非同步請求函式 用debug引數若為true則為用為除錯,開啟除錯可以看到非同步的執 況,但是失去非同步的效果 main.php method get if empt程式設計客棧y post data 程式設計客棧 header m...

C 非同步程式設計

同步方法和非同步方法的區別 同步方法呼叫在程式繼續執行之前需要等待同步方法執行完畢返回結果 非同步方法則在被呼叫之後立即返回以便程式在被呼叫方法完成其任務的同時執行其它操作 非同步程式設計概覽 net framework 允許您非同步呼叫任何方法。定義與您需要呼叫的方法具有相同簽名的委託 公共語言執...

C 非同步程式設計

一 基礎知識 1 非同步程式設計 2 非同步方法 乙個程式呼叫某個方法,在處理完成前就返回該方法。同步和非同步主要用於修飾方法。當乙個方法被呼叫時,呼叫者需要等待該方法執行完畢並返回才能繼續執行,我們稱這個方法是同步方法 當乙個方法被呼叫時立即返回,並獲取乙個執行緒執行該方法內部的業務,呼叫者不用等...