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开启操作日志(包含所有操作)

    配置 方法一:设置配置文件my.cnf(需重启) 添加以下参数 [mysqld] log_output=FILE # 日志打印到文件,默认配置,可以配置成table,日志就会记录到mysql库中的相应 ...

  2. Codeforces 166B - Polygon (判断凸包位置关系)

    Codeforces Round #113 (Div. 2) 题目链接:Polygons You've got another geometrical task. You are given two ...

  3. 2019 牛客多校第三场 H Magic Line

    题目链接:https://ac.nowcoder.com/acm/contest/883/H 题目大意 给定 N 个不同的整数点,N 为偶数,求一条直线,这条直线能把这 N 个点对半分开,输出这条直线 ...

  4. USACO 2007 “March Gold” Ranking the Cows

    题目链接:https://www.luogu.org/problemnew/show/P2881 题目链接:https://vjudge.net/problem/POJ-3275 题目大意 给定标号为 ...

  5. Python3 From Zero——{最初的意识:002~字符串和文本}

    一.使用多个界定符分割字符串 字符串.split(',')形式只适用于单一分割符的情况:多分割符同时应用的时候,可使用re.split() >>> line = 'asdf fjdk ...

  6. Windows系统下安装MySQL 8.0.11数据库

    MySQL数据库是常用的数据库之一,而且该数据库开源免费,所以很多公司在使用.本文记录如何在Windows系统下安装MySQL数据库,本次安装的版本号为8.0.11,这个版本是当前的最新版本,据宣传, ...

  7. python3没有urllib2 出现报错:语法错误

    我的代码:import sklearn.datasets bug: 法错误. 我的原因:Python3运行的时候的运行了你下载的urllib2.py文件,而这个文件是不属于Python3的. 解决办法 ...

  8. Python:获取当前py的文件名

    采用pathlib库 from pathlib import Path Path(__file__).name

  9. <读书笔记>001-以解决问题为导向的python编程实践

    以解决问题为导向的python编程实践 0.第0章:计算机科学 思考:计算机科学是否为计算机编程的简称? 编程的困难点:1.同时做2件事(编程语言的语法.语义+利用其解决问题)  2.什么是好程序(解 ...

  10. 2019 年百度之星·程序设计大赛 - 初赛一 C. Mindis 离散化+dijkstra

    题目传送门 题意:中文题面 思路: 先将所有题目给出的点离散化一下,得到一张n*m的网格,n和m最大都是400,所以我们只需要枚举每个加强的区域,将属于这个区域的边处理一下(所有横着的和竖着的边,暴力 ...