运行 不同线程中的 HttpClient GetAsync
Run HttpClient GetAsync in different threads
我有一个场景,我有 x 个查询,我想 运行 每个查询在不同的线程中。
我的问题是 Http GetAsync
方法只有在它 return 是一个任务时才有效,我试图 return 无效但它没有用。但是要创建多个线程,我需要 return 一个 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 class 中有多个方法具有不同的查询。我尝试使用 GetAwaiter().GetResult()
,但这也没有用。如何在不同线程中使用 运行 每个查询?
public class Threads
{
public static void thread1Create()
{
string query = "SOMEQUERY";
threadAsync(query).GetAwaiter().GetResult()
}
};
want to run each query in a different thread.
为什么?
您确实需要了解 windows 的内部工作原理以及完成端口是什么。无线程上的异步方法 运行 - 它们在完成后只会被调用到线程中。这实际上是基于 windows 网络模型 - 在它工作时没有线程。
My problem is the Http GetAsync method only works when it returns a Task, I
tried to return a void
鉴于 GET Returns 任务中的某些内容,那将是完全无用的。
你的问题是这样的:
HttpResponseMessage response = await client.GetAsync(query);
不需要立即等待。启动所有异步获取操作,然后开始等待它们。
真正学习基础知识 - 你使用异步,但你仍然在线程中思考,因此你不了解异步模型真正给你的东西。结果是像编程这样的货物崇拜完全抵消了异步的优势,现在询问如何通过线程重新获得它们。
我有一个场景,我有 x 个查询,我想 运行 每个查询在不同的线程中。
我的问题是 Http GetAsync
方法只有在它 return 是一个任务时才有效,我试图 return 无效但它没有用。但是要创建多个线程,我需要 return 一个 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 class 中有多个方法具有不同的查询。我尝试使用 GetAwaiter().GetResult()
,但这也没有用。如何在不同线程中使用 运行 每个查询?
public class Threads
{
public static void thread1Create()
{
string query = "SOMEQUERY";
threadAsync(query).GetAwaiter().GetResult()
}
};
want to run each query in a different thread.
为什么?
您确实需要了解 windows 的内部工作原理以及完成端口是什么。无线程上的异步方法 运行 - 它们在完成后只会被调用到线程中。这实际上是基于 windows 网络模型 - 在它工作时没有线程。
My problem is the Http GetAsync method only works when it returns a Task, I tried to return a void
鉴于 GET Returns 任务中的某些内容,那将是完全无用的。
你的问题是这样的:
HttpResponseMessage response = await client.GetAsync(query);
不需要立即等待。启动所有异步获取操作,然后开始等待它们。
真正学习基础知识 - 你使用异步,但你仍然在线程中思考,因此你不了解异步模型真正给你的东西。结果是像编程这样的货物崇拜完全抵消了异步的优势,现在询问如何通过线程重新获得它们。