C# 如何在C中多线程运行一个命令#
我正在尝试做一个程序,可以模拟500个连接(HTTP请求)到一个网站。因此,我想知道如何将http请求函数组合起来并一起运行,而不必通过许多命令手动创建许多线程。你的意思是C# 如何在C中多线程运行一个命令#,c#,multithreading,C#,Multithreading,我正在尝试做一个程序,可以模拟500个连接(HTTP请求)到一个网站。因此,我想知道如何将http请求函数组合起来并一起运行,而不必通过许多命令手动创建许多线程。你的意思是 for(int i=0;i<500;i++) { Task.Run(()=>YourFunc()); } for(int i=0;iYourFunc()); } 你的意思是什么 for(int i=0;i<500;i++) { Task.Run(()=>YourFunc()); } for
for(int i=0;i<500;i++)
{
Task.Run(()=>YourFunc());
}
for(int i=0;iYourFunc());
}
你的意思是什么
for(int i=0;i<500;i++)
{
Task.Run(()=>YourFunc());
}
for(int i=0;iYourFunc());
}
使用TPL中的TaskFactory.FromAsync尝试下面的代码
创建一个任务,该任务表示一对begin和end方法
符合异步编程模型模式
如果您正在运行控制台应用程序,您应该等待使用Task.WaitAll来完成所有并行任务
var tasks = new List<Task>();
for (int i = 0; i < 500; i++)
{
tasks.Add(Task.Run(async () =>
{
var request = WebRequest.Create("http://www.example.com");
var response = (HttpWebResponse)await Task.Factory
.FromAsync<WebResponse>(request.BeginGetResponse,
request.EndGetResponse,
null);
Console.WriteLine($"Request {i} status is {response.StatusCode}");
}));
}
try
{
// Wait for all the tasks to finish.
Task.WaitAll(tasks.ToArray());
}
catch (AggregateException e)
{
for (int j = 0; j < e.InnerExceptions.Count; j++)
{
Console.WriteLine("\n-------------------------------------------------\n{0}", e.InnerExceptions[j].ToString());
}
}
使用TPL中的TaskFactory.FromAsync尝试下面的代码
创建一个任务,该任务表示一对begin和end方法
符合异步编程模型模式
如果您正在运行控制台应用程序,您应该等待使用Task.WaitAll来完成所有并行任务
var tasks = new List<Task>();
for (int i = 0; i < 500; i++)
{
tasks.Add(Task.Run(async () =>
{
var request = WebRequest.Create("http://www.example.com");
var response = (HttpWebResponse)await Task.Factory
.FromAsync<WebResponse>(request.BeginGetResponse,
request.EndGetResponse,
null);
Console.WriteLine($"Request {i} status is {response.StatusCode}");
}));
}
try
{
// Wait for all the tasks to finish.
Task.WaitAll(tasks.ToArray());
}
catch (AggregateException e)
{
for (int j = 0; j < e.InnerExceptions.Count; j++)
{
Console.WriteLine("\n-------------------------------------------------\n{0}", e.InnerExceptions[j].ToString());
}
}
只需创建500个async
请求,不要等待它们。然后使用Task.whalll
。您现在已经从线程中抽象出来了。只需创建500个async
请求,而不必等待它们。然后使用Task.whalll
。您现在已从线程中抽象出来。但您从不等待运行的任务。@john正确,但我不知道OP main Thread我仍然认为您应该以某种方式演示等待。想象一下,他正在一个控制台应用程序中执行此操作。它将在所有请求完成之前退出。@john,我当然会编辑它,谢谢,但您从不等待运行的任务。@john,没错,但我不知道OP main Thread。我仍然认为您应该以某种方式演示等待。想象一下,他正在一个控制台应用程序中执行此操作。它将在所有请求完成之前退出。@john,我当然会编辑它,谢谢