更改方法使用集合时的异步问题

时间:2014-04-17 13:17:03

标签: c# asynchronous c#-5.0 async-await

我有一个这样的方法:

public async Task<IEnumerable<Model>> Get(string link)
{
   MyRequestAsync request = new MyRequestAsync(link);
   return await request.GetResult();
}

工作得很好。

然后我决定改变这一点:

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;
}

现在我遇到了问题,由于某些原因它只是没有返回结果。据我所知,我陷入僵局。

你知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

在UI线程上添加ConfigureAwait(false)不死锁。

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;

答案 1 :(得分:-3)

尝试一下:

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

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

经常使用async和await会让人感到困惑(至少对我而言)并且会产生我不确定的结果。这是我遇到麻烦时换掉的第一件事。

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