我正在尝试制作一个可以模拟网站500个连接(HTTP请求)的程序。所以我想知道如何多个http请求函数并将它们全部一起运行,而无需手动创建许多线程的命令。
答案 0 :(得分:5)
尝试下面的代码,使用TPL中的TaskFactory.FromAsync。
创建一个任务,表示一对开始和结束方法 符合异步编程模型模式。
如果您正在运行控制台应用程序,则应等待使用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());
}
}
您可以将for
循环替换为Parallel.For
,它将并行执行任务
Parallel.For(1, 500,
index => {
// web request
});
答案 1 :(得分:1)
for(int i=0;i<500;i++)
{
Task.Run(()=>YourFunc());
}