非同步解釋:(個人專屬理解,可能有bug)
比如乙個非同步方法裡面有三句話,先執行其中第一句話,若執行到第二句話時的時間較長,
便會開闢多乙個執行緒,一邊執行非同步方法裡的第二句話,一邊又執行非同步方法外面的方法,
等到非同步方法裡面的第二句話完全執行完再跳進非同步方法裡面執行第三句話
(這個一邊。。。一邊。。。就是非同步的特點)
舉個小李子:
class一開始執行:直接執行到program
public
void
openmainsswitch()
", getcurrentthreadid());
task task =commandopenmainsswitch();
console.writeline(
"同步方法第一句話
", getcurrentthreadid());
console.writeline(
"同步方法第二句話
", getcurrentthreadid());
task.wait();
//阻塞帶有await的非同步方法即阻塞非同步方法第二句話,直到第二句話執行完再執行其他
////或者
//while (!task.iscompleted)
console.writeline(
"同步方法第三句話
", getcurrentthreadid());
}public
async
task commandopenmainsswitch()
", getcurrentthreadid());
await task.run(() =>);
console.writeline(
"執行非同步方法的的第三句話
", getcurrentthreadid());
thread.sleep(
6000
); console.writeline(
"執行非同步方法的的第四句話
", getcurrentthreadid());
}public
string
getcurrentthreadid()
}
普通的同步01
執行非同步方法的的第一句話01
同步方法第一句話01
執行非同步方法的的第二句話
同步方法第二句話01
等待3秒後,即thread.sleep(3000);,才會輸出:執行非同步方法的的第三句話
因為有task.wait(); 阻塞執行緒,所以死活都要休眠6秒即thread.sleep(6000);,輸出:執行非同步方法的的第四句話
後才能輸出:同步方法第三句話
大佬總結與部落格:
3. task 分為兩種:
1) task,表示可以執行乙個非同步操作,宣告如下:
public class task : iasyncresult, idisposable
2) task,表示可以執行帶有返回值的非同步操作,宣告如下:
public class task: task
4. 非同步方法的返回型別必須為 void、task、task中的其中一種。
1) void,表示無返回值,不關心非同步方法執行後的結果,一般用於僅僅執行某一項任務,但是不關心結果的場景。
2) task,表示非同步方法將返回乙個 task 物件,該物件通常用於判斷非同步任務是否已經完成,可以使用 taskobj.wait() 方法等待,或者 taskobj.iscompleted 判斷。
3) task,表示非同步方法將返回乙個 task物件,該物件的 result 屬性則是非同步方法的執行結果,呼叫該屬性時將阻塞當前執行緒(非同步方法未執行完成時)。
歸納一下:void 不關心結果;task 只關心是否執行完成;task不止關心是否執行完成,還要獲取執行結果。
C 非同步程式設計
同步方法和非同步方法的區別 同步方法呼叫在程式繼續執行之前需要等待同步方法執行完畢返回結果 非同步方法則在被呼叫之後立即返回以便程式在被呼叫方法完成其任務的同時執行其它操作 非同步程式設計概覽 net framework 允許您非同步呼叫任何方法。定義與您需要呼叫的方法具有相同簽名的委託 公共語言執...
C 非同步程式設計
一 基礎知識 1 非同步程式設計 2 非同步方法 乙個程式呼叫某個方法,在處理完成前就返回該方法。同步和非同步主要用於修飾方法。當乙個方法被呼叫時,呼叫者需要等待該方法執行完畢並返回才能繼續執行,我們稱這個方法是同步方法 當乙個方法被呼叫時立即返回,並獲取乙個執行緒執行該方法內部的業務,呼叫者不用等...
C 非同步程式設計
定義要求 方法簽名包含 async 修飾符。按照約定,非同步方法的名稱以 async 字尾結尾。返回型別為下列型別之一 1.如果你的方法有運算元為 tresult 型別的返回語句,則為 task。2.如果你的方法沒有返回語句或具有沒有運算元的返回語句,則為 task。3.void 如果要編寫非同步事...