[英]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.