簡體   English   中英

在不同線程中運行 HttpClient GetAsync

[英]Run HttpClient GetAsync in different threads

我有一個場景,我有 x 個查詢,我想在不同的線程中運行每個查詢。

我的問題是 Http GetAsync 方法僅在返回 Task 時才有效,我嘗試返回 void 但它不起作用。 但是要創建多個線程,我需要返回一個空值。

 public static async Task threadAsync(string query)
        {      
           
            var watch = System.Diagnostics.Stopwatch.StartNew();
            try
            {
                watch.Restart();

                HttpResponseMessage response = await client.GetAsync(query);
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync(); 
                watch.Stop();


                string logData += $"Execution Time: {watch.ElapsedMilliseconds} ms, ";

                watch.Reset();
                var data = JObject.Parse(responseBody);

               

               


            }
            catch (HttpRequestException e)
            {
                Console.WriteLine("\nException Caught!");
                Console.WriteLine("Message :{0} ", e.Message);
            }
        }

我在 Threads 類中有多個具有不同查詢的方法。 我嘗試使用 GetAwaiter().GetResult(),但這也不起作用。 如何在不同的線程中運行每個查詢?

public class Threads
{
    public static void thread1Create()
    {
        string query = "SOMEQUERY";
        threadAsync(query).GetAwaiter().GetResult()
}
};

想要在不同的線程中運行每個查詢。

為什么?

您確實需要了解 Windows 內部如何工作以及完成端口是什么。 異步方法在沒有線程上運行 - 它們只是在完成后被調用到線程中。 這實際上基於 Windows 網絡模型 - 沒有線程,而它的工作原理。

我的問題是 Http GetAsync 方法僅在返回任務時才有效,我嘗試返回空值

鑒於 GET 返回任務中的某些內容,那將完全沒用。

你的問題是這樣的:

HttpResponseMessage response = await client.GetAsync(query);

無需立即等待。 啟動所有異步獲取操作,然后開始等待它們。

真正學習基礎知識 - 您使用異步,但您仍然在線程中思考,因此您不了解異步模型真正為您提供了什么。 結果是像編程一樣的貨物崇拜完全取消了異步的優勢,現在詢問如何通過線程重新獲得它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM