苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.4-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 1625|回复: 1

[学生提问] 测试Parallel的返回值,怎么不不执行下面的代码?

[复制链接]
发表于 2022-1-20 22:58:17 | 显示全部楼层 |阅读模式
form1中的代码是这样的:
[C#] 纯文本查看 复制代码
private void button2_Click(object sender, EventArgs e)
        {
           Scan s=new Scan(this);
            s.RunTask();
        }


Scan类中的代码是这样的:
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WinFormsApp1
{
    public class Scan
    {

        private Form1 frm;
/// <summary>
        /// 线程最大总数
        /// </summary>
        private int thread_num = 20;

        public Scan(Form1 form,int threadNum=20)
        {
            this.frm = form;
            this.thread_num = threadNum;
        }

        public void RunTask()
        {

            #region 初始化数据
            int[][] dirsArray = new int[100][];
            for (int i = 0; i < 100; i++)
            {
                int[] innerArray = new int[i];
                for (int j = 0; j < i; j++)
                {
                    innerArray[j] = i;
                }
                dirsArray[i] = innerArray;
            }
            #endregion
            Task.Run(() =>
            {
                Debug.WriteLine($"当前线程CurrentThreadId={Thread.CurrentThread.ManagedThreadId}");
                //1.从数据库中获取数据

                //设置线程数
                if (dirsArray.Length<this.thread_num)
                {
                    this.thread_num = dirsArray.Length;
                }
                ParallelOptions parallelOptions = new ParallelOptions()
                {
                    MaxDegreeOfParallelism = this.thread_num
                };
                ParallelLoopResult result = Parallel.ForEach(dirsArray, parallelOptions, currentTypeArray =>
                {
                    Debug.WriteLine($"CurrentThreadId={Thread.CurrentThread.ManagedThreadId},执行{string.Join(", ", currentTypeArray)}");
                    //this.frm.Func(string.Join(", ", currentTypeArray));                    
                    foreach (var num in currentTypeArray)
                    {
                        Thread.Sleep(1);
                    }
                });
                while (result.IsCompleted)
                {
                    Console.WriteLine("是否完成:{0}", result.IsCompleted);
                    Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
                    break;
                }
            });
            Console.WriteLine("数据跑完啦!");
        }
    }
}


但执行的结果却不显示执行完的情况:
微信截图_20220120225654.png
当执行完所有的线程后,并没有出现:
true
数据跑完啦!
等预想的输出结果,这是怎么回事啊?请大神帮忙解决下,谢谢!



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2022-1-21 09:02:54 | 显示全部楼层
线程就没有执行到这一步吧,你处理一下异常看是不是中间报错了
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2022-5-19 03:27

© 2014-2021

快速回复 返回顶部 返回列表