将方法更改为使用集合时出现异步问题
本文关键字:异步 问题 集合 方法 | 更新日期: 2023-09-27 17:58:43
我有一个这样的方法:
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;
}
现在我遇到了一个问题,由于某种原因,它只是没有返回结果。据我所知,我陷入了僵局。
你知道怎么解决吗?
将ConfigureAwait(false)添加到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;
尝试一下:
IList<Model> list = new List<Model>();
至
ConcurrentBag<Model> list = new ConcurrentBag<Model>();
通常情况下,使用async和wait会让人感到困惑(至少对我来说),并会产生我不确定的结果。这是我遇到麻烦时换掉的第一件东西。
http://msdn.microsoft.com/en-us/library/dd381779(v=vs.110).aspx