在有时候,我们要从一些外设备或是网络索取大量数据时,外设备可能须要处理非常久才干把传输数据回计算机,这时我们仅仅有傻傻的等待。
但我们採用异步方法就不同了,我们能够利用这点时间去做别的事,等待完毕后,再通知我们接收。
1.怎样进行异步调用
(1)定义要运行异步的方法。
(2)定义一个与运行异步方法同样签名的托付。
(3)实例化该托付,该托付应该指向该异步方法。
(4)利用BeginInvoke启动异步方法。
(5)利用EndInvoke得到结果。
(6)设置回调方法。(非必需)
2.BeginInvoke和EndInvoke方法的使用:
我们都知道当程序定义一个托付时,公共语言执行库将自己主动为该托付定义具有签名的BegInvoke和EndInvoke 方法
(1)BeginInvoke
BeginInvoke 方法用于启动异步调用。它与你须要异步运行的方法具有同样的參数,另外还有两个额外的參数。
BeginInvoke 表示马上返回,不等待异步调用的完毕。
BeginInvoke 返回一个IAsyncResult,可用于监视异步进度。
(2)EndInvoke
EndInvoke 方法用于检索异步调用结果。调用BeginInvoke后可随时调用EndInvoke方法;假设异步调用未完毕,EndInvoke 将一直堵塞。
异步调用完毕。EndInvoke的參数包含您须要异步运行的方法的out和ref參数(在 Visual Basic 中为 <Out> ByRef 和 ByRef)以及由BeginInvoke 返回的IAsyncResult。
3.演示样例:
namespace ConsoleApplication
{ //定义代理 delegate String Mydelegate(); class temp { static void Main(String[] args) { //实例化代理 Mydelegate Md = new Mydelegate(AsyncMethod); //实例一个回调代理 AsyncCallback callback = new AsyncCallback(callbackMethod); //開始运行异步方法 Md.BeginInvoke(callback, Md); Console.ReadLine(); } //异步调用的方法 static String AsyncMethod() { Console.WriteLine("异步方法正运行"); String str = "异步调用已结束"; return str; }//回调方法 static void callbackMethod(IAsyncResult Ias)
{ Mydelegate Md = (Mydelegate)Ias.AsyncState; String str = Md.EndInvoke(Ias); Console.WriteLine(str); } }}