如何在C#中的多个线程中运行一个命令

时间:2017-12-30 04:29:09

标签: c# multithreading

我正在尝试制作一个可以模拟网站500个连接(HTTP请求)的程序。所以我想知道如何多个http请求函数并将它们全部一起运行,而无需手动创建许多线程的命令。

2 个答案:

答案 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());
}