2011-04-19 158 views
3

基本上,這些超越了顯而易見的區別是什麼?我應該什麼時候使用哪種形式?什麼時候應該使用UdpClient.BeginReceive?什麼時候應該在後臺線程上使用UdpClient.Receive?

class What 
{ 
    public Go() 
    { 
     Thread thread = new Thread(new ThreadStart(Go2)); 
     thread.Background = true; 
     thread.Start(); 
    } 
    private Go2() 
    { 
     using UdpClient client = new UdpClient(blabla) 
     { 
      while (stuff) 
      { 
       client.Receive(guh); 
       DoStuff(guh); 
      } 
     } 
    } 
} 

class Whut 
{ 
    UdpClient client; 
    public Go() 
    { 
     client = new UdpClient(blabla); 
     client.BeginReceive(guh, new AsyncCallback(Go2), null); 
    } 
    private Go2(IAsyncResult ar) 
    { 
     client.EndReceive(guh, ar); 
     DoStuff(guh); 
     if (stuff) client.BeginReceive(guh, new AsyncCallback(Go2), null); 
     else client.Close(); 
    } 
} 

回答

4

我不認爲差異通常是巨大的,但我寧願全異步方法(...開始/結束...)如果我希望暫停在傳入的流中,這樣回調可以被卸載幾層,而不需要額外的線程。異步方法的另一個優點是,您可以隨時獲取所需的數據,排隊另一個異步獲取,然後在異步線程上處理新數據,爲並行性(一次讀取,一次處理)提供更多選項。當然,這也可以手動完成(也許使用工作隊列)。你可以當然配置...

相關問題