将方法更改为使用集合时出现异步问题

本文关键字:异步 问题 集合 方法 | 更新日期: 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