用异步的方式调用同步方法
2008-12-08 09:40
633 查看
using System.Text; using System.Data; using System.Data.SqlClient; using System.Collections; using System.Threading; using System.IO; using System.Runtime.InteropServices; using System; using System.Runtime.Remoting.Messaging; namespace Test { class Program { delegate void mydelegate(); private void smork() { //方法1 AsyncCallback mycallback = new AsyncCallback(tellyou);//(回调函数) mydelegate mdg = new mydelegate(move); IAsyncResult result = mdg.BeginInvoke(mycallback, null); result.AsyncWaitHandle.WaitOne();//等待异步完成 Console.WriteLine("异步调用后"); //方法2 //AsyncCallback mycallback = new AsyncCallback(tellyou); //mydelegate mdg = new mydelegate(move); //IAsyncResult result = mdg.BeginInvoke(mycallback, null); //while (!result.IsCompleted) //{ // //Thread.Sleep(50);//不要与要有区别 //} // 方法3(没有回调函数) // mydelegate mdg = new mydelegate(move); // IAsyncResult result = mdg.BeginInvoke(null, null); // while (!result.IsCompleted) // { // //Thread.Sleep(60); // } // mdg.EndInvoke(result); //停止调用 //方法4(没有回调函数) //mydelegate mdg = new mydelegate(move); //IAsyncResult result = mdg.BeginInvoke(null, null); //result.AsyncWaitHandle.WaitOne(); //mdg.EndInvoke(result); //停止调用 } public void move() { for (int i = 0; i < 5; i++) { Console.WriteLine("异步任务执行"); Thread.Sleep(1000); } } public void tellyou(IAsyncResult result)//回调函数 { AsyncResult asyncResult = result as AsyncResult; mydelegate mydelegate = asyncResult.AsyncDelegate as mydelegate; mydelegate.EndInvoke(result); if (result.IsCompleted) { Console.WriteLine("异步任务完成"); } } static void Main(string[] args) { Program pr = new Program(); Console.WriteLine("开始执行.."); pr.smork(); Thread.Sleep(1000);//注释掉结果有点不同 Console.WriteLine("我是主线程"); Console.ReadLine(); } } }
相关文章推荐
- C#使用异步方式调用同步方法
- 使用异步方式调用同步方法(实例详解)
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法
- [转摘]使用异步方式调用同步方法
- 用异步的方式调用同步方法
- ES transport client底层是netty实现,netty本质上是异步方式,但是netty自身可以使用sync或者await(future超时机制)来实现类似同步调用!因此,ES transport client可以同步调用也可以异步(不过底层的socket必然是异步实现)
- C#的新特性体验(异步方法的同步调用)
- 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
- 网络编程中同步、异步、阻塞和非阻塞四种调用方式的区别
- C#的新特性体验(异步方法的同步调用)
- 在同步方法中调用异步方法时如何避免死锁问题
- 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
- async await 同步方法调用异步方法死锁
- WCF方法“异步调用”的“同步问题”
- 同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式
- 普通方法调用,Invoke,begininvoke三者的区别总结及异步与同步的区别总结