我有600个功能性xUnit测试,每个测试都在测试中间调用一个httpClient.GetAsync(apiUrl)和httpClient.PostAsync(apiUrl, data)方法,这将调用一些外部API。
当我按顺序执行每个测试时,所有测试都正常工作。而且,即使在我并行运行5-6测试用例的时候,一切都很好。
我的问题是,当我从顶部开始所有600个测试用例时(它将在600个测试用例中并行启动大约50个),所有的测试都挂在它发送httpClient.PostAsync(apiUrl, data)方法的地方。
同样的问题发生在它执行httpClient.GetAsync(apiUrl)方法的地方。但在我将其更改为httpClient.GetAsync(apiUrl).ConfigureAwait(false)之后,它就修复了这个问题。
但是,当我将httpClient.PostAsync(apiUrl, data)改为httpClient.PostAsync(apiUrl, data).ConfigureAwait(false)时,问题仍然是一样的。
有人能解释一下为什么会这样吗?我该怎么做才能解决这个问题。
发布于 2022-07-08 09:14:28
当我按下面的方式更改httpClient.PostAsync(apiUrl, data)方法时,它会修复这个问题。我不知道两种方法有什么区别。
以前的方式
var response = await httpClient.PostAsync(apiUrl, data);我在上面做了如下修改,它解决了这个问题。
var task = httpClient.PostAsync(apiUrl, data);
var response = task.GetAwaiter().GetResult();我还发现了一些类似的问题,在下面的文章中已经讨论过了。如果有人面临类似的问题,请跟随下面的帖子,因为它包含一些更有用的提示和理由。HttpClient.GetAsync(...) never returns when using await/async
https://stackoverflow.com/questions/72892521
复制相似问题