.net利用委托BeginInvoke和EndInvoke实现异步编程

本文介绍了如何利用.NET中的委托BeginInvoke和EndInvoke方法实现异步编程。通过BeginInvoke,方法可以在独立线程上执行,允许原始线程继续工作。EndInvoke用于获取异步操作的结果。异步编程模式包括等待-直到完成、轮询和回调,其中回调模式在方法执行完毕后调用用户定义的回调函数,处理结果。
摘要由CSDN通过智能技术生成

最近看书,看到了可以利用学过的委托知识实现异步编程,这里做一个简单的说明示例。如果委托对象在调用列表中只有一个方法(引用方法),他就可有异步执行这个方法。委托类有两个方法,BeginInvoke和EndInvoke。

  • 当我们调用委托的BeginInvoke方法时,它开始在一个独立线程上执行引用方法。并且立即返回到原始线程。原始线程可以继续。而引用方法会在线程池中的线程中并行执行。
  • 当程序希望获取已完成的异步方法的结果时,可以检查BeginInvoke返回的IAsyncResult的IsCompleted属性。或调用委托的EndInvoke方法来等待委托完成。

等待-直到完成 模式

        delegate string MyDownLoadDel(string weburl);
        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            Debug.WriteLine(string.Format("开始计时:{0,4:N0}ms", watch.Elapsed.TotalMilliseconds));
            MyDownLoadDel del = new MyDownLoadDel(DownLoadWeb);
            IAsyncResult iar = del.BeginInvoke("https://www.asp.net/", null, null);
            Debug.WriteLine(string.Format("委托BeginInvoke:{0,4:N0}ms", watch.Elapsed.TotalMilliseconds));
            string str = del.EndInvoke(iar);
            Debug.WriteLine(string.Format("EndInvoke,下载网站大小:{0}耗时:{1,4:N0}ms", str.Length, watch.Elapsed.TotalMilliseconds));
            Console.ReadKey(); //暂停
        }
        public static string DownLoadWeb(string url)
        {
            WebClient wc = new WebClient();
            string str = wc.DownloadString(url);
            Debug.WriteLine(string.Format("下载网站{0}结束", url));
            return s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值