public async Task GetMyAccountInfoAsync()
{
var token = await auth.GetIdTokenAsync(false);
using var req = new HttpRequestMessage(
HttpMethod.Get, "https://my-company-domain.com/api/protected");
req.Headers.Add("Authorization", "Bearer " + token);
var http = new HttpClient();
using var res = await http.SendAsync(req); // Slow here
res.EnsureSuccessStatusCode();
// Irrelevant code
}
По какой-то причине, когда приложение запускает этот код, для завершения требуется ровно 43 секунды (+- несколько мс):


Интересно, если я отправлю запрос на https://example.com или https ://stackoverflow.com с тем же кодом, он очень быстрый, поэтому я подозреваю, что что-то не так с разрешением DNS. Я пробовал следующие исправления, но бесполезно:
- Используйте новый экземпляр HttpClient, как в приведенном выше коде, или используйте общий единственный экземпляр из DI (исходный код).
- Выполнение того же запроса в cUrl занимает около 1 секунды. Следовательно, это не может быть связано с сервером моей компании, поскольку я уже запустил его, и любые запросы от cUrl занимают очень короткое время.
- Обернул приведенный выше код в Task.Run, потому что подумал, что, возможно, запускать его в потоке Main/UI нехорошо. Проблема все еще возникает.
Эта проблема не возникает на Android или iOS.
Обновление:< /p>
- Вероятно, проблема с интернет-провайдером. Я использовал VPN, и проблема больше не возникает. Однако это не объясняет, почему в cUrl нет этой проблемы. Точно так же у меня был клиент, который не мог использовать Nuget в Канаде, если он не использовал VPN, но все за пределами .NET в порядке.
- тот же код, запущенный в новом консольном приложении, также имеет ту же проблему, поэтому это похоже на проблему .NET Windows. Тем не менее, для запуска требуется около 43 секунд.
- Мой DNS установлен на Cloudflare 1.1.1.1 с включенным DNS через TLS. Однако я не знаю, использует ли .NET ту же конфигурацию DNS.
- Когда я прерываюсь в течение длительного периода:

- Это должно быть общесистемная проблема, потому что я пробовал это в PowerShell, и это тоже занимает очень много времени:
$http.GetStringAsync("https://company-domain.com/api/protected").GetAwaiter().GetResult()
Подробнее здесь: https://stackoverflow.com/questions/791 ... -very-long
Мобильная версия