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

C# 将方法更改为使用集合时出现异步问题,c#,asynchronous,c#-5.0,async-await,C#,Asynchronous,C# 5.0,Async Await,我有一个这样的方法: public async Task<IEnumerable<Model>> Get(string link) { MyRequestAsync request = new MyRequestAsync(link); return await request.GetResult(); } 公共异步任务获取(字符串链接) { MyRequestAsync请求=新建MyRequestAsync(链接); return wait request

我有一个这样的方法:

public async Task<IEnumerable<Model>> Get(string link)
{
   MyRequestAsync request = new MyRequestAsync(link);
   return await request.GetResult();
}
公共异步任务获取(字符串链接)
{
MyRequestAsync请求=新建MyRequestAsync(链接);
return wait 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;
}
public异步任务Get([FromUri]IList链接)
{
IList list=新列表();
foreach(链接中的var链接)
{
MyRequestAsync请求=新建MyRequestAsync(链接);
Add(wait request.GetResult());
}
退货清单;
}
现在我遇到了一个问题,出于某种原因,它只是没有返回结果。据我所知,我陷入了僵局

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

试试看:

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

ConcurrentBag列表=新的ConcurrentBag();
通常情况下,使用async和await会让人困惑(至少对我来说),并会产生我不确定的结果。这是我遇到麻烦时的第一件事

将ConfigureAwait(false)添加到UI线程上的not死锁

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;
public异步任务Get([FromUri]IList链接)
{
IList list=新列表();
foreach(链接中的var链接)
{
MyRequestAsync请求=新建MyRequestAsync(链接);
Add(await request.GetResult().ConfigureAwait(false));
}
退货清单;

可能重复的@Fals,似乎没有关系。他没有使用yield。如果你发布了一个复制问题的小而完整的示例,我们将能够更好地帮助你。暂停调试器以查看堆栈上的内容。执行是否停止?可能是
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().ConfigureAwait(false));
}

return list;