2014-04-17 25 views
0

我有一個這樣的方法。異步問題,當改變的方法來使用收集

於是我決定改變這一個一點點:

public async Task<IEnumerable<Model>> Get([FromUri]IList<string> links) 
{ 
    IList<Model> list = new List<Model>(); 
    foreach (var link in links) 
    { 
     MyRequestAsync request = new MyRequestAsync(link); 
     list.Add(await request.GetResult()); 
    } 

    return list; 
} 

,現在我有一個問題,由於某種原因,它只是沒有返回結果。爲了我的理解,我陷入了僵局。

你知道如何解決這個問題嗎?使用異步

IList<Model> list = new List<Model>(); 

ConcurrentBag<Model> list = new ConcurrentBag<Model>(); 

很多時候,等待可能會比較混亂(對我來說,至少),並且將產生的結果我不能確定的:

+0

可能重複[是否有可能爲 「等待收益率的回報DoSomethingAsync()」(http://stackoverflow.com/questions/5061761/is-it-possible-to-await-yield-return- dosomethingasync) – Fals

+1

@Fals,似乎沒有關係。他沒有使用收益。 –

+1

如果您發佈了一個小而完整的示例來重現問題,我們將能夠更好地爲您提供幫助。 –

回答

-3

這給一試。這是我遇到麻煩時我換掉的第一件事。

http://msdn.microsoft.com/en-us/library/dd381779(v=vs.110).aspx

+0

我不認爲[貨物崇拜編程](http://en.wikipedia.org/wiki/Cargo_cult_programming)(「我不知道這是幹什麼的,但它對我有用,所以它可能適用於你也是,即使情況不同「)是一個好習慣。而且我看不出有什麼理由說明爲什麼這種改變會對此有所幫助。 – svick

0

添加ConfigureAwait(假)不要在UI線程死鎖。

public async Task<IEnumerable<Model>> Get([FromUri]IList<string> links) 
{ 
    IList<Model> list = new List<Model>(); 
    foreach (var link in links) 
{ 
    MyRequestAsync request = new MyRequestAsync(link); 
    list.Add(await request.GetResult().ConfigureAwait(false)); 
} 

return list;