http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 12422|回复: 4

[咨询站长] 这段代码运行提示 索引超出了数组界限,请老大指点如何解决

[复制链接]
发表于 2016-6-13 15:31:11 | 显示全部楼层 |阅读模式
主要是如下这段代码:
         
[C#] 纯文本查看 复制代码
  Task<string>[] myTasks = new Task<string>[5];
            CancellationTokenSource[] myTokenSources=new CancellationTokenSource[5];
            for(int i=0;i<5;i++)
            {
                myTokenSources = new CancellationTokenSource();
                myTasks = new Task<string>(() => MyTaskFunc(i, myTokenSources), myTokenSources.Token);//这里提示的:索引超出了数组界限
                myTasks.Start();
            }
            Task<string[]> myResultTask = Task.WhenAll<string>(myTasks);
            myResultTask.Wait();
            if(myResultTask.Status==TaskStatus.RanToCompletion)
            {
                string[] myResult = myResultTask.Result;
[i]            }



完整程序代码麻烦看下附件,实际上不到50行自己的代码,请老大指点,谢谢了!是VS2013的工程 简单的任务数组取消框架.rar (56.86 KB, 下载次数: 13)


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2016-6-13 15:51:40 | 显示全部楼层
MyTaskFunc在那里定义的,是什么,?另外你打断点到这一步看看i的值是多少,然后直接查一下对应的MyTaskFunc值,应该 很容易找到原因吧,提示超出范围就说明这里根本没有0-4之间的某个数,看看是不是存储的数据没有达到5个,然后循环却执行到了
 楼主| 发表于 2016-6-13 16:02:54 | 显示全部楼层
站长苏飞 发表于 2016-6-13 15:51
MyTaskFunc在那里定义的,是什么,?另外你打断点到这一步看看i的值是多少,然后直接查一下对应的MyTaskFun ...

还麻烦看下附件,代码都是有关联的嘛。这是MyTaskFunc的定义:
private string MyTaskFunc(object obj,CancellationTokenSource myTokenSource)
        {
            string strResult = string.Empty;
            int nRow = (int)obj;
            for (int i = 0; i < 1000;i++ )
            {
                strResult += i.ToString();
                if(myTokenSource.IsCancellationRequested)
                {
                    strResult = "任务被取消了";
                    MyShowOnListView(nRow, strResult);
                    return strResult;
                }
                MyShowOnListView(nRow, strResult);
                Thread.Sleep(10);
            }
            return strResult;
        }
发表于 2016-6-13 16:05:11 | 显示全部楼层
现在问题应该是很明确了。MyTaskFunc里没有达到5个值,而你循环写的是0-4所以会出错,你只需要调试看一下i的值是几,然后再看一下你的数据是多少就行了,

或者更简单的方法,你直接使用foreach循环就不会出现这问题。
 楼主| 发表于 2016-6-13 16:17:06 | 显示全部楼层
站长苏飞 发表于 2016-6-13 16:05
现在问题应该是很明确了。MyTaskFunc里没有达到5个值,而你循环写的是0-4所以会出错,你只需要调试看一下i ...

按照老大刚才的提示,我又调试了,打断点出现这个情况:当i的值为4时for循环执行完了之后,在这句 myResultTask.Wait();执行了之后居然又进入了for循环,我觉得有点奇怪。 1.jpg
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-4-29 14:12

© 2014-2021

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