我有一个这样的方法:
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;
}
现在我遇到了问题,由于某些原因它只是没有返回结果。据我所知,我陷入僵局。
你知道如何解决这个问题吗?
答案 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