static int takesawhile(int data, int ms)委託可以直接非同步進行(begininvoke),而不用再開執行緒(thread),實質是一樣的public delegate int
takesawhiledelegate(int data, int ms);
takesawhile(1, 3000);
iasyncresult ar = d1.begininvoke(1, 3000, null, null);iscompleted屬性用於判斷非同步是否執行完畢.while (!ar.iscompleted)
console.writeline(d1.endinvoke(ar));
這裡用乙個while語句語句判斷委託是否執行完畢.
雖然委託執行的方法是非同步的,但問題是無法知道什麼時候執行完畢,卻當委託有返回值時,還需要執行endinvoke來獲取返回值,還不是徹底的非同步.
只有在begininvoke執行完畢後才能獲取到endinvoke的返回值,否則就失去了非同步的效果,所以需要判斷iscompleted以阻止執行endinvoke
// wait handle使用後的效果同上,無法真正意義上的解決問題.如果內部提供乙個callback的方法就好了。iasyncresult ar = d1.begininvoke(1, 3000, null, null);
while (true) }
int result = d1.endinvoke(ar);
console.writeline("result: ", result);
這是真正解決問題的方法
d1.begininvoke(1, 3000, takesawhilecompleted, d1);
static void takesawhilecompleted(iasyncresult ar)第3個引數為非同步委託,第4個執行的物件.", result);
}
更方便的執行匿名委託
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...