想问一下大shen们,这种情况该这么处理?

img


就是我想在主函数的for循环中计算在20s的时间里,算出40个结果,也就是2个结果同时打印,有啥方法是可以这个样子?

在C#编程中,可以使用多种方式实现多线程,这里使用了Parallel.For(),先看运行效果:

img

为了演示,示例中将Sleep时间设置成了200毫秒。

示例代码:

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    internal class Program
    {
        private static int[] _a;
        private static int[] _b;
        static void Main(string[] args)
        {
            Console.WriteLine("按任意键开始...");
            Console.ReadKey();
            _a = Enumerable.Range(1, 22).ToArray();
            _b = Enumerable.Range(21, 22).ToArray();
            Parallel.For(0, 2, new ParallelOptions { MaxDegreeOfParallelism = 2 }, (index) =>
                {
                    Console.WriteLine($"线程索引:{index}");
                    for (var i = 0; i < 20; i++)
                    {
                        var data = Add(i);
                        Console.WriteLine($"第{i + 1}次结果:{data}");
                    }
                });
            Console.WriteLine("任务已完成");

            Console.ReadKey();
        }

        private static int Add(int i)
        {
            Thread.Sleep(200);
            var c = _a[i] + _b[i];
            return c;
        }
    }
}

除此之外,还可以使用Task.Factory.StartNew()来实现等待所有线程任务都完成的效果,详细示例请参考:

多线程咯