问题是,当我将 await
放在 HttpClient.GetStreamAsync()
之前时,它不会返回任何内容,Visual Studio 只是挂起自己,只要我决定停止调试,就不会返回任何内容。当我尝试使用 .GetAwaiter().GetResult()
时,它会提示我在 this 问题上显示的错误,不幸的是没有产生任何解决方案。
这些错误导致了什么? TLS 问题不是肯定的。网络团队确保我试图从中获取结果的 api 的地雷请求没有被阻止,另一方确认他们也没有阻止我们的请求。这可以得到确认,因为 Postman 请求与 api 一起工作得很好。我使用了 HttpClient
和 WebRequest
,它们提示了同样的错误。等待甚至不会导致错误,它只是闲置...
为什么我会遇到这个问题?我怎样才能克服它?任何帮助表示赞赏。
(我尝试的代码和 solutions
可以在我的 this 问题中找到。
答案 0 :(得分:1)
对您的问题的简短回答是“您的服务器没有返回所有数据,您确实要求该方法等待”。但这没有帮助。
您可能希望在 HttpClient get async 方法上超时。下面的代码是如何做到这一点的人为示例。下面是代码的作用:
所以,当你说“await”时,它的意思是“在这里等待直到我调用的方法完成,除非我在此之前取消等待。另外请记住,根据你的需要,可以有各种 CancellationTokenSources。这只是一个例子。
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace cancel
{
class Program
{
static async Task Main(string[] args)
{
CancellationTokenSource cancellationSource = new CancellationTokenSource(new TimeSpan(0,0,0,0,5000)); //Succeeds
//CancellationTokenSource cancellationSource = new CancellationTokenSource(new TimeSpan(0,0,0,0,10)); //Fails
CancellationToken cancellationToken = cancellationSource.Token;
var client = new HttpClient();
try
{
var result = await client.GetAsync("https://www.google.com",cancellationToken);
Console.WriteLine($"Response code = {result.StatusCode}");
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}