using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks; public class Example
{
public static void Main()
{
var qTasks = new List<Task<string>>();
var paralist = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
foreach (var para in paralist)
{
//StartNew 只接受输入参数是object类型的Func
var fun = new Func<object, string>(
(pa) =>
{
//pa 是Func的定义参数
Console.WriteLine("para is {0}", pa);
//Thread.Sleep(new Random().Next(500, 3000));
int ipa = Convert.ToInt32(pa);
int result = ipa * 5;
return result.ToString();
}
); var task = Task.Factory.StartNew(fun, para); //para是传入参数
qTasks.Add(task);
Console.WriteLine(" task id is {0}", task.Id);
} Task.WaitAll(qTasks.ToArray()); //等待所有线程执行完毕 //收集所有task返回的数据
foreach (var task in qTasks)
{
if (task.Result != null)
{
Console.WriteLine("task id : {0} , result : {1} ", task.Id, task.Result);
}
} Console.ReadKey();
}
}

  

有时候会需要用到ManualResetEvent来等待其他线程是否执行完毕,用法如下:

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks; public class Example
{
static ManualResetEvent manualEvent = new ManualResetEvent(false); public static void Main()
{
manualEvent.Reset(); //等同于将initialState设置为false Console.WriteLine("In main ..");
LongTimeFunc(); manualEvent.WaitOne(10000); Console.WriteLine("wait thread finish..."); Console.ReadKey();
} private static void LongTimeFunc()
{
//Thread 多数时候可以使用Task代替,此刻thread设置为STA,所以这么用
Thread thread = new Thread(new ParameterizedThreadStart(ExecuteFunc));
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start("real parameters"); //ExecuteFunc 函数从此处传入参数
} private static void ExecuteFunc(object obj)
{
//long time operation
Thread.Sleep(2000);
Console.WriteLine(obj.ToString());
manualEvent.Set();
}
}

  

task code的更多相关文章

  1. UWP -- Background Task 深入解析

    原文:UWP -- Background Task 深入解析 1. 重点 锁屏问题 从 Windows 10 开始,用户无须再将你的应用添加到锁屏界面,即可利用后台任务,通用 Windows 应用必须 ...

  2. 【FreeRTOS学习03】小白都能懂的Task Management 任务管理基本概念介绍

    在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级: 1 软实时和硬实时 硬实时系统的任务运行正确性与响应时限是紧密相关的 ...

  3. java多线程系类:JUC线程池:03之线程池原理(二)(转)

    概要 在前面一章"Java多线程系列--"JUC线程池"02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包 ...

  4. Windows 通用应用尝试开发 “51单片机汇编”总结

    一.前言 终于完成windows通用应用“51单片机汇编”,半年前开始玩WindowsPhone开发的第一个真正意义上的App(还很多缺点=_=).开发从1月中旬考完试到今天,期间实习了半个月,玩了几 ...

  5. Java多线程系列--“JUC线程池”03之 线程池原理(二)

    概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...

  6. uC/OS-II任务(OS_task)块

    /*************************************************************************************************** ...

  7. uC/OS-II汇编代码

    ;*************************************************************************************************** ...

  8. uC/OS-II内核的服务文件

    /*************************************************************************************************** ...

  9. Oracle 使用小计(4)

    1.oracle字符串分割函数split )定义split_type类型: CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (4000) ...

随机推荐

  1. mysql数据库中的索引介绍与优化(转)

    一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表 ...

  2. Delphi中文件名函数-路径、名称、子目录、驱动器、扩展名

    文件名函数 文件名函数可以对文件的名称.所在子目录.驱动器和扩展名等进行操作.下表列出这些函数及其功能. 函数说明 ExpandFileName() //返回文件的全路径(含驱动器.路径) Extra ...

  3. shell 单引号&双引号的使用

    使用双引号: shell> X='parameter' shell> echo "Hello $X" Hello parameter 单引号中嵌套单引号: shell& ...

  4. Python3实战spark大数据分析及调度✍✍✍

    Python3实战spark大数据分析及调度  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  5. 22个Photoshop网页设计教程网站推荐

    这些网站都会经常更新一些优秀且高质量的Web界面设计教程.如果你热爱网页设计并且经常搜集各种界面设计教程,那么你一定要把下面这些网站收藏起来. 您还可以参考以下网页设计相关教程及资源:<Web ...

  6. IOS中iframe的滚动条不启作用

    引自:https://www.cnblogs.com/weinan/archive/2013/01/05/2832800.html 问题描述: iframe设置了高度(例如500px).倘若ifram ...

  7. Two-phase Termination 把玩具收拾好再去睡觉。

    字面翻译是“两阶段终止”,这个模式用来进行结束操作后,再终止线程.比如我们想停止一个线程,但是让他停止之前必须要做一些清理工作,这时候就需要用到two-phase termination模式. pub ...

  8. win10 +Kinect V1 1414环境配置

    win10 +Kinect V1 1414环境配置 想起老Lab的机器人头顶的Kinect 安装准备 demo展示 人脸识别 照片不能够检测到人脸 可以去除背景 检测骨架 想起老Lab的机器人头顶的K ...

  9. js 阻止事件

    event.stopPropagation();//阻止事件冒泡 ,可阻止父类事件的发生 event.preventDefault();//阻止默认行为 如A标签

  10. java继承,多态

    子类继承父类,用父类去接收子类,其实我觉得用父类,子类来形容继承关系是不恰当的,比如再发生多态的时候,Car c = new W();w是大众,你能说Car 和W是父子关系吗,我觉得用所属关系类描述可 ...