2012-10-15 39 views
1

看完這個blog reader tutorial後,我注意到在一個方法中有14個異步調用。這些都是同時運行還是同時運行?如果不是,那麼發生錯誤時會發生什麼?其餘部分是否連續運行,或者整個方法是否停止?當我運行一個WinRT metro app異步方法時,它是否也同時運行?

示例代碼:

public async Task GetFeedsAsync() 
     { 
      Task<FeedData> feed1 = 
       GetFeedAsync("http://windowsteamblog.com/windows/b/developers/atom.aspx"); 
      Task<FeedData> feed2 = 
       GetFeedAsync("http://windowsteamblog.com/windows/b/windowsexperience/atom.aspx"); 
      Task<FeedData> feed3 = 
       GetFeedAsync("http://windowsteamblog.com/windows/b/extremewindows/atom.aspx"); 
      Task<FeedData> feed4 = 
       GetFeedAsync("http://windowsteamblog.com/windows/b/business/atom.aspx"); 
      Task<FeedData> feed5 = 
       GetFeedAsync("http://windowsteamblog.com/windows/b/bloggingwindows/atom.aspx"); 
      Task<FeedData> feed6 = 
       GetFeedAsync("http://windowsteamblog.com/windows/b/windowssecurity/atom.aspx"); 
      Task<FeedData> feed7 = 
       GetFeedAsync("http://windowsteamblog.com/windows/b/springboard/atom.aspx"); 
      Task<FeedData> feed8 = 
       GetFeedAsync("http://windowsteamblog.com/windows/b/windowshomeserver/atom.aspx"); 
      // There is no Atom feed for this blog, so we use the RSS feed. 
      Task<FeedData> feed9 = 
       GetFeedAsync("http://windowsteamblog.com/windows_live/b/windowslive/rss.aspx"); 
      Task<FeedData> feed10 = 
       GetFeedAsync("http://windowsteamblog.com/windows_live/b/developer/atom.aspx"); 
      Task<FeedData> feed11 = 
       GetFeedAsync("http://windowsteamblog.com/ie/b/ie/atom.aspx"); 
      Task<FeedData> feed12 = 
       GetFeedAsync("http://windowsteamblog.com/windows_phone/b/wpdev/atom.aspx"); 
      Task<FeedData> feed13 = 
       GetFeedAsync("http://windowsteamblog.com/windows_phone/b/wmdev/atom.aspx"); 
      Task<FeedData> feed14 = 
       GetFeedAsync("http://windowsteamblog.com/windows_phone/b/windowsphone/atom.aspx"); 

      this.Feeds.Add(await feed1); 
      this.Feeds.Add(await feed2); 
      this.Feeds.Add(await feed3); 
      this.Feeds.Add(await feed4); 
      this.Feeds.Add(await feed5); 
      this.Feeds.Add(await feed6); 
      this.Feeds.Add(await feed7); 
      this.Feeds.Add(await feed8); 
      this.Feeds.Add(await feed9); 
      this.Feeds.Add(await feed10); 
      this.Feeds.Add(await feed11); 
      this.Feeds.Add(await feed12); 
      this.Feeds.Add(await feed13); 
      this.Feeds.Add(await feed14); 
     } 

回答

1

(在WinRT中使用)的.NET 4.5 HttpClient的異步API自動只要您撥打HttpClient.GetAsync方法(或他們的認沽,後刪除等啓動Web請求任務..等同)。

這些任務是承諾。

因此,在上面的例子中,所有的任務被並行啓動,則該線程將提供由第一AWAIT直到第一請求返回,然後,直到第二返回,等等...

如果任務在等待時已經完成,則等待指令將同步運行。

如果在執行請求期間發生錯誤,等待任務時將拋出異常。因此,如果您不等待任務,任何異常都將丟失。

相關問題