Victor.Stone
dot net 备忘录
posts - 21,  comments - 25,  trackbacks - 0

 

        // --- 1 普通异步 ---

        
static void Main(string[] args)
        
{
            DateTime dt 
= DateTime.Now;

            RemoteObj rmtObj 
= new RemoteObj();
            
// 1 ---------------------------------------
            
//Console.WriteLine(rmtObj.Method1(1, 2, 2000));

            
// 2 ---------------------------------------
            MyDelegate md = new MyDelegate(rmtObj.Method1);
            IAsyncResult Iar 
= md.BeginInvoke(33125000nullnull);
            MainMethod();

            
if (!Iar.IsCompleted)
            
{
                Iar.AsyncWaitHandle.WaitOne();
//因为主方法阻塞3秒,异步方法阻塞2秒,所以这句是不会执行的
            }

            
else
            
{
                Console.WriteLine(
"结果是" + md.EndInvoke(Iar));
            }

            Console.WriteLine(
"用了" + ((TimeSpan)(DateTime.Now - dt)).TotalSeconds + "");
            Console.ReadLine();
        }


//---------------------------------------
    public delegate int MyDelegate(int a, int b, int time);

    
class RemoteObj
    
{
        
public RemoteObj()
        

        }



        
/// <summary>
        
/// 返回a+b之和,阻塞milliSecond
        
/// </summary>
        
/// <param name="a"></param>
        
/// <param name="b"></param>
        
/// <param name="second"></param>
        
/// <returns></returns>

        public int Method1(int a, int b, int milliSecond)
        
{
            Console.WriteLine(
"--- 异步方法开始 ---");
            System.Threading.Thread.Sleep(milliSecond);
            Console.WriteLine(
"--- 异步方法结束 ---");
            
return a + b;
        }

    }



异步的回调

        private static MyDelegate md;

        
// --- 2 回调异步 ---
        static void Main(string[] args)
        
{
            DateTime dt 
= DateTime.Now;
            
//RemoteObject.MyObject app=(RemoteObject.MyObject)Activator.GetObject(typeof(RemoteObject.MyObject),System.Configuration.ConfigurationSettings.AppSettings["ServiceURL"]);
            RemoteObj app = new RemoteObj();
            md 
= new MyDelegate(app.Method1);
            AsyncCallback ac 
= new AsyncCallback(CallBack1);
            IAsyncResult Iar 
= md.BeginInvoke(21325000, ac, null);
            MainMethod();
            Console.WriteLine(
"用了" + ((TimeSpan)(DateTime.Now - dt)).TotalSeconds + "");
            Console.ReadLine();            
        }


        
public static void CallBack1(IAsyncResult Iar)
        
{
            
if (Iar.IsCompleted)
            
{
                Console.WriteLine(
"结果是" + md.EndInvoke(Iar));
            }

        }



posted on 2010-12-08 20:48 Victor.Stone 阅读(293) 评论(0)  编辑 收藏 引用 所属分类: .net framework
只有注册用户登录后才能发表评论。

<2012年3月>
26272829123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(2)

随笔分类(17)

文章分类

搜索

  •  

积分与排名

  • 积分 - 24249
  • 排名 - 193

最新随笔

阅读排行榜