非同步程式設計Demo

2021-09-06 02:01:45 字數 1143 閱讀 3049

static int takesawhile(int data, int ms)

public delegate int

takesawhiledelegate(int data, int ms);

委託可以直接非同步進行(begininvoke),而不用再開執行緒(thread),實質是一樣的

takesawhile(1, 3000);
iasyncresult ar = d1.begininvoke(1, 3000, null, null);

while (!ar.iscompleted)

console.writeline(d1.endinvoke(ar));

iscompleted屬性用於判斷非同步是否執行完畢.

這裡用乙個while語句語句判斷委託是否執行完畢.

雖然委託執行的方法是非同步的,但問題是無法知道什麼時候執行完畢,卻當委託有返回值時,還需要執行endinvoke來獲取返回值,還不是徹底的非同步.

只有在begininvoke執行完畢後才能獲取到endinvoke的返回值,否則就失去了非同步的效果,所以需要判斷iscompleted以阻止執行endinvoke

// wait handle

iasyncresult ar = d1.begininvoke(1, 3000, null, null);

while (true) }

int result = d1.endinvoke(ar);

console.writeline("result: ", result);

使用後的效果同上,無法真正意義上的解決問題.如果內部提供乙個callback的方法就好了。

這是真正解決問題的方法

d1.begininvoke(1, 3000, takesawhilecompleted, d1);
static void takesawhilecompleted(iasyncresult ar)

", result);

}

第3個引數為非同步委託,第4個執行的物件.

更方便的執行匿名委託

d1.begininvoke(1, 3000,

ar =>

", result);

},null);

只方便記憶

多程序程式設計demo

在伺服器資源豐富的情況下,可以啟用多程序加速大規模資料的處理過程。本節以demo展示,輸入1000個數組成的列表,以列表的形式對應輸出其平方結果。定義基礎func功能函式 輸入乙個數,輸出其平方結果。開啟10個程序,每個程序執行一遍func函式。設定1000次迴圈,每次迴圈呼叫乙個程序,執行一步fu...

ajax非同步重新整理簡單的demo

說明 本案例是在瀏覽器中區域性重新整理物件people的age屬性的值 1.首先建立乙個people類 package com.jsf.demo1 public class people public void setname string name public int getage public...

golang多協程非同步讀寫demo

package main import fmt sync func main for i 1 i 3 i setwg.wait close kk 只要乙個 chan 還有未讀的資料,即使把它 close 掉,你還是可以繼續把這些未讀的資料消費完,而且bool值為true,之後才是讀取零值資料和fal...