【发布时间】:2021-11-08 07:35:22
【问题描述】:
我有一个场景,我有 x 个查询,我想在不同的线程中运行每个查询。
我的问题是 Http GetAsync 方法仅在它返回一个任务时才有效,我试图返回一个 void 但它不起作用。但是要创建多个线程,我需要返回一个 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()
}
};
【问题讨论】:
-
你需要停止思考线程,专注于任务。
await Task.WhenAll(someQueryList.Select(threadAsync)) -
好消息:您的
thread1Create()函数没有创建线程。
标签: c# multithreading dotnet-httpclient