C# Task 循环任务_C# Task.Run调用外部参数

首先讲一下:

c# Task启动带参数和返回值的方法:

Task启动带参数

Task.Run(() => test("123"));

public void Test(string s){

...todo..

}

Task启动带参数和返回值的方法

var s = Task.Run(() => isTest("ss"));

var t = s.Result;

private bool isTest(string isno) {

return true;

}

 然后开始我们的实例:即通过for循环开启十个task,并分别在task任务中输出1~10.

using System;using System.Threading.Tasks;namespace ConsoleApp1{    class Program    {         static void Main(string[] args)        {            Task[] tasks = new Task[10];            int[] numbers = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };            for (int i = 0; i < tasks.Length; i++)            {                tasks[i] = Task.Run(() =>                {                    Test(numbers[i]);                });            }            Console.ReadLine();        }        static public void Test(int s)        {            Console.WriteLine("Number:{0}", s);        }            }    }

运行后发现报错了:索引超出了数组界限。i会一直是10

24fbf895c6ef24453ededd389523626a.png

原因解析:

Task.Run是在新的线程中异步执行的,在 for 循环中 Task 并不会立即执行,“i会一直是10”说明 for 循环结束后,Task 才开始执行,这时 i 的值正好是 10 。

解决办法:

这说明 i 的值没有被捕获到 Task 的执行上下文中,也就是说 i 变量的值不在捕获范围内,要想让 i 被捕获,需要引入中间变量,下面的代码就可以正常执行

using System;using System.Threading.Tasks;namespace ConsoleApp1{    class Program    {         static void Main(string[] args)        {            Task[] tasks = new Task[10];            int[] numbers = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };            for (int i = 0; i < tasks.Length; i++)            {                var j = i;                tasks[i] = Task.Run(() =>                {                    Test(numbers[j]);                });            }            Console.ReadLine();        }        static public void Test(int s)        {            Console.WriteLine("Number:{0}", s);        }            }    }

运行结果:

333ce5ea6553f0549b3a491525a6ed36.png

------------------------------------------------------------------------

如果这篇文章对你有帮助,就请多多点击,让更多朋友看到,需要进C#交流群群请加z438679770,备注进群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何向K8s,Docker-Compose注入镜像Tag

最近在做基于容器的CI/CD, 一个朴素的自动部署的思路是&#xff1a;从Git Repo打出git tag&#xff0c;作为镜像Tagssh远程登录到部署机器向部署环境注入镜像Tag&#xff0c;拉取镜像&#xff0c;重新部署下面分享我是如何在K8s、docker-compose中注入镜像Tag&#xff1f;k8s熟…

东北大学计算机 大一物理考试题,东北大学大学物理期末考题及答案Word版

《东北大学大学物理期末考题及答案Word版》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《东北大学大学物理期末考题及答案Word版(5页珍藏版)》请在人人文库网上搜索。1、传播优秀Word版文档 &#xff0c;希望对您有帮助&#xff0c;可双击去除&#xff01;东北大学物…

showModalDialog()、showModelessDialog()方法使用详解

一、showModalDialog和showModelessDialog有什么不同&#xff1f;   showModalDialog&#xff1a;被打开后就会始终保持输入焦点。除非对话框被关闭&#xff0c;否则用户无法切换到主窗口。类似alert的运行效果。   showModelessDialog&#xff1a;被打开后&#xff0c;用户…

.NET 项目中的单元测试

.NET 项目中的单元测试Intro“不会写单元测试的程序员不是合格的程序员&#xff0c;不写单元测试的程序员不是优秀的工程师。”—— 一只想要成为一个优秀程序员的渣逼程序猿。那么问题来了&#xff0c;什么是单元测试&#xff0c;如何做单元测试。单元测试单元测试的定义按照维…

职称计算机还用考试,职称计算机考试注意事项

职称计算机考试注意事项一、注意事项首先&#xff0c;由于考试是模块化设计&#xff0c;所以在报考时要选择自己熟悉的科目。切忌好高骛远&#xff0c;选择那些自己日常使用机会不多、并无把握的科目。许多人在考试时选择了自己工作中最常用的Windows XP、Word 2003、PowerPoin…

休假2周

又一次辞职了 :(这次的原因是觉得之前的公司无论在数据量还是流量及其它方面都过于小了&#xff0c;而且所谓的‘股份’也是一种看不见的东西&#xff0c;公司也没有上市&#xff0c;分红也是老板说了算&#xff0c;我也决定不了什么&#xff1b;其他的原因就是在一些人际、行政…

python安装地是什么_如何安装python

展开全部 Python是跨平台的&#xff0c;可以运行在2113Windows、Mac和各种Linux/Unix系统上5261。在Windows上写Python程序&#xff0c;放到Linux上也是能够4102运行的。 要开始学习1653Python编程&#xff0c;首先就得把Python安装到电脑里。安装后&#xff0c;会得到Python解…

ABP vNext 实现租户Id自动赋值插入

背景在使用ABP vNext过程中&#xff0c;因为我们的用户体系庞大&#xff0c;所以一直与其他业务同时开发&#xff0c;在开发其他业务模块时&#xff0c;我们一直存在着误区&#xff1a;认为ABP vNext 自动处理了数据新增时的租户Id&#xff08;TenantId&#xff09;的自动赋值插…

solaris 命令

一.chmod 命令 chmod用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法&#xff1b;另一种是包含数字的数字设定法。 1. 文字设定法 命令中各选项的含义为&#xff1a; 在一个命令行中可给出多…

计算机组成与结构PLA,计算机组成与结构.doc

《》教学大纲安徽大学 计算机 学院二OO六年 4 月《计算机组成与结构》是计算机科学与技术、软件工程专业的一门主干课程&#xff0c;本课程以冯&#xff0e;诺依曼计算机模型作为教学起点&#xff0c;介绍计算机的组织结构和工作原理&#xff0c;剖析计算机的运算器、存储器、控…

深入研究.NET 5的开放式遥测

OpenTelemetry 介绍OpenTelemetry是一种开放的源代码规范&#xff0c;工具和SDK&#xff0c;用于检测&#xff0c;生成&#xff0c;收集和导出遥测数据&#xff08;指标&#xff0c;日志和跟踪&#xff09;,开放遥测技术得到了Cloud Native Computing Foundation&#xff08;CN…

python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?...

优化这种方法的方法不是找出更快的方式来生成排列&#xff0c;而是生成尽可能少的排列。 首先&#xff0c;如果您只想要按排序顺序的组合&#xff0c;您将如何做到这一点&#xff1f; 您不需要生成0到100的所有可能组合&#xff0c;然后对其进行过滤。第一个数字a可以是0到100之…

登陆xp系统,无法显示桌面

症状登录到 Windows xp 后&#xff0c;可能会看到空白桌面或看不到桌面。出现这种情况时&#xff0c;可以按下 CtrlAltDelete 键启动任务管理器&#xff0c;但正在运行的任务或进程列表中却没有列出 Explorer.exe。启动 Explorer.exe 的新实例也无法解决问题。 原因…

孕妇可以在计算机教室待吗,电脑对孕妇有辐射吗?孕妇使用电脑的注意事项

怀孕期间孕妇使用电脑有电磁辐射吗&#xff1f;孕妇当然可以使用电脑&#xff0c;经科学研究发现在电脑前工作对孕妇不会产生什么影响&#xff01;孕妇既然是特别保护对象&#xff0c;那么怀孕妈妈在使用电脑时也会有一些注意事项。第一宝宝小编为准妈妈搜集了十二条注意事项。…

python类和函数_构建程序. Python中的类和函数

如果希望mainfunc的所有实例都使用相同的KeySeq对象,则可以使用默认参数值技巧&#xff1a; def mainfunc(ksKeySeq()): key ks.next() 只要您实际上没有传递ks值,对mainfunc的所有调用都将使用在定义函数时创建的KeySeq实例. 如果您不知道,这就是为什么&#xff1a;函数是一个…

CCDP-思科认证网络设计高级工程师

CCDP是Cisco售前设计支持工程师的最高级认证。获得CCDP认证证书应能够运用应具有的网络知识、对设备安装、配置和操作技巧对复杂的LAN、WAN和交换式局域网进行设计。 CCDP认证必备条件必须先获取CCNA和CCDA证书CCDP考试642-801 BSCI 642-811 BCMSN 642-871 ARCH CCDP 重新认证C…

.NET5实战千万并发,性能碾压各版本,云原生时代,.NET5为王!

在移动互联网时代掉队的.NET&#xff0c;当下正凭借着.NET5的开源跨平台以及容器友好&#xff0c;在云原生时代正在重铸辉煌。而作为.NET开发者&#xff0c;新年跳槽季的高并发问题会更多了&#xff0c;因为高并发能牵扯出太多问题&#xff0c;接口响应超时、CPU负载升高、GC频…

html点击按钮计算两个输入框的和_小程序计算报价功能介绍

一、使用场景用户可在管理后台设置计算值和运算公式&#xff0c;访客输入对应计算值&#xff0c;即可实现自动计算出结果&#xff0c;并提供相关的咨询入口&#xff0c;适用于装修、建材、房贷、车险等行业的报价行为。二、功能版本限制小程序至尊版可开启和使用计算报价功能。…

中南民族大学计算机图像处理实验报告,中南民族大学数字图像处理程序及图像...

数字图像处理实验课 matlab实验程序 以及图像结果 附带有命名图仅供参考 定有错误 木有绝对正确实验11—1close all;clear;fzeros(40,40);%f(10:30,10:30)1;subplot(1,3,1);%imshow(f);%Ffft2(f)subplot(1,3,2);%imshow(F);%Dlog(1abs(F));%subplot(1,3,3);imshow(D);1——2clc…

用python画树_Python+Turtle动态绘制一棵树实例分享

本文实例主要是对turtle的使用&#xff0c;实现Pythonturtle动态绘制一棵树的实例&#xff0c;具体代码&#xff1a; # drawtree.py from turtle import Turtle, mainloop def tree(plist, l, a, f): """ plist is list of pens l is length of branch a is hal…