2010-04-30 75 views
1

我想了解什麼是IAsyncresult好,因此我寫了這段代碼。問題在於它的行爲如同我稱之爲「MetodaAsync」的正常方式。在調試時,程序在此停止,直到方法完成。任何幫助表示感謝,謝謝。爲什麼我的異步調用不起作用?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     delegate int Delegat(); 

     static void Main(string[] args) 
     { 
      Program p=new Program(); 
      Delegat d = new Delegat(p.MetodaAsync); 
      IAsyncResult a = d.BeginInvoke(null, null); //I have removed callback 
      int returned=d.EndInvoke(a); 
      Console.WriteLine("AAA"); 

     } 
     private int MetodaAsync() 
     { 
      int AC=0; 
      for (int I = 0; I < 600000; I++) 
      { 
       for (int A = 0; A < 6000000; A++) 
       { 

       } 
       Console.Write("B"); 
      } 
      return AC; 
     } 


    } 
} 

回答

2

爲了「看」它是多線程的,這樣做:

IAsyncResult a = d.BeginInvoke(null, null); //I have removed callback 
for (int j = 0; j < 100; j++) 
{ 
    Console.Write("JJJ"); 
    Thread.Sleep(1); 
}  
int returned=d.EndInvoke(a); 
Console.WriteLine("AAA"); 

但在一般情況下,你會調用EndInvoke從回調。

1

它在EndInvoke中阻塞。你可以在BeginInvoke和EndInvoke之間的主線程中做一些有用的工作。

+0

因此,如果它被阻塞,這裏的異步性是什麼?或者當我在Begin和EndIvoke之間做一些事情時,它會同時完成? – Petr 2010-04-30 07:48:54

+0

@Petr:是的,它會同時執行。 – Henrik 2010-04-30 07:50:54