Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何发出http web asyncGET请求_C#_.net - Fatal编程技术网

C# 如何发出http web asyncGET请求

C# 如何发出http web asyncGET请求,c#,.net,C#,.net,我想提出一个get请求。以下是我测试的代码: public string Get(string uri) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.De

我想提出一个get请求。以下是我测试的代码:

public string Get(string uri)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
    request.AutomaticDecompression = DecompressionMethods.GZip 
                                     | DecompressionMethods.Deflate;

    using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    using(Stream stream = response.GetResponseStream())
    using(StreamReader reader = new StreamReader(stream))
    {
        return reader.ReadToEnd();
    }
}
但问题是它会冻结GUI,我发现以下代码:

public async Task<string> GetAsync(string uri)
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
   request.AutomaticDecompression = DecompressionMethods.GZip 
                                   | DecompressionMethods.Deflate;

   using(HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
   using(Stream stream = response.GetResponseStream())
   using(StreamReader reader = new StreamReader(stream))
   {
       return await reader.ReadToEndAsync();
   }
}

公共异步任务GetAsync(字符串uri) { HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression=DecompressionMethods.GZip |减压方法:放气; 使用(HttpWebResponse=(HttpWebResponse)wait request.GetResponseAsync()) 使用(Stream=response.GetResponseStream()) 使用(StreamReader=新StreamReader(stream)) { return wait reader.ReadToEndAsync(); } } 但我不擅长多任务处理

有关于如何使用此功能的帮助吗?
tnx

我不知道您想做什么,但是您可以尝试删除usings,因为您只需要在imports部分添加usings,并尝试像这样使用您的方法:

公共类HttpHandler {

        static HttpClient client = new HttpClient();


        public async Task<string> Get(string apiURL)
        {
            HttpResponseMessage response = await client.GetAsync(apiURL);
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            return await reader.ReadToEndAsync();
        }

    }
statichttpclient=newhttpclient();
公共异步任务获取(字符串APIRL)
{
HttpResponseMessage response=await client.GetAsync(apiURL);
Stream=response.GetResponseStream();
StreamReader=新的StreamReader(流);
return wait reader.ReadToEndAsync();
}
}

你就快到了。您只需使用
wait
调用
GetAsync
函数,就可以得到所需的结果

请不要忘记在调用函数的签名中包含
async
。您希望使用
GetAsync
的地方有
GetText
支持,那么代码段应该是:

private async void GetText()
{
    string str = await GetAsync(url);

}

tnx我会试试这个,我想对列表框中的URL发出一个get请求,但是因为它们有大量的数据并且需要时间来完成循环,ui不负责,我搜索并发现代码类似于处理另一个威胁(任务),但我不知道如何调用和使用它。我觉得上面的代码看起来不错。函数签名包含了
async
,函数体中包含了2个wait。你有什么问题吗?我看不到
任务的范围。在您的情况下,并行