我有一個場景,我有 x 個查詢,我想在不同的執行緒中運行每個查詢。
我的問題是 HttpGetAsync方法僅在回傳 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()
}
};
uj5u.com熱心網友回復:
想要在不同的執行緒中運行每個查詢。
為什么?
您確實需要了解 Windows 內部如何作業以及完成埠是什么。異步方法在沒有執行緒上運行 - 它們只是在完成后被呼叫到執行緒中。這實際上基于 Windows 網路模型 - 沒有執行緒,而它的作業原理。
我的問題是 Http GetAsync 方法僅在回傳任務時才有效,我嘗試回傳空值
鑒于 GET 回傳任務中的某些內容,那將完全沒用。
你的問題是這樣的:
HttpResponseMessage response = await client.GetAsync(query);
無需立即等待。啟動所有異步獲取操作,然后開始等待它們。
真正學習基礎知識 - 您使用異步,但您仍然在執行緒中思考,因此您不了解異步模型真正為您提供了什么。結果是像編程一樣的貨物崇拜完全取消了異步的優勢,現在詢問如何通過執行緒重新獲得它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/355685.html
