廢話不多說,直接上**(ps:我就喜歡簡單、直接、粗暴)
using system;
using system.collections.generic;
using system.linq;
using system.runtime.remoting.messaging;
using system.text;
using system.threading;
using system.threading.tasks;
namespace 非同步呼叫委託
", s);
#endregion
#region 直接通過呼叫非同步委拖獲取返回值,會阻塞主線程
// 開始執行非同步呼叫,使用了執行緒池,為執行緒
//iasyncresult res = md.begininvoke(1,30,null,"test");
//// 在這裡可以進行其它操作
"在這裡可以進行其它操作的哦~");
//// 這種方式獲取返回值會中斷主線程的執行
//int s = md.endinvoke(res);
"sum is: ", s);
#endregion
#region 通過**函式實現非同步委託返回值,不阻塞主線程
iasyncresult res = md.begininvoke(1, 30, callback, "test");
#endregion
//子執行緒你慢慢玩,我一邊等你,一邊做點事,你做玩完就一起回家
int i = 0;
while (!res.iscompleted)
console.readkey();
}// 實際的計算方法 - 假設非常耗時
private static int sum(int fromnum, int tonum)
return sum;
}// **函式,即當執行緒非同步結束以後呼叫此方法
private static void callback(iasyncresult ar)
", ar.asyncstate); //獲得並輸出非同步呼叫的結果
int s = ((mydelegate)ar.asyncdelegate).endinvoke(ar);
console.writeline("sum is: ", s);}}
// 宣告委託
public delegate int mydelegate(int fromnum, int tonum);
}
C 委託的非同步呼叫
本文將主要通過 同步呼叫 非同步呼叫 非同步 三個示例來講解在用委託執行同乙個 加法類 的時候的的區別和利弊。首先,通過 定義乙個委託和下面三個示例將要呼叫的方法 新增的命名空間 using system.threading using system.runtime.remoting.messagi...
C 委託的同步呼叫和非同步呼叫
委託的invoke方法用來進行同步呼叫。同步呼叫也可以叫阻塞呼叫,它將阻塞當前執行緒,然後執行呼叫,呼叫完畢後再繼續向下進行。同步呼叫的例子 using system using system.threading public delegate int addhandler int a,int b ...
C 委託的同步呼叫和非同步呼叫
委託的invoke方法用來進行同步呼叫。同步呼叫也可以叫阻塞呼叫,它將阻塞當前執行緒,然後執行呼叫,呼叫完畢後再繼續向下進行。同步呼叫的例子 using system using system.threading public delegate int addhandler int a,int b ...