学习任重道远啊 2022-02-18 20:11 采纳率: 71.4%
浏览 25
已结题

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

img


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

  • 写回答

2条回答 默认 最新

  • 码老头 2022-02-19 13:55
    关注

    在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()来实现等待所有线程任务都完成的效果,详细示例请参考:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 创建了问题 2月18日

悬赏问题

  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?