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. Android 防止多次点击提交数据

    package com.test1.test; import android.app.Activity; import android.os.Bundle; import android.view.V ...

  2. AsyncAwait

    using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; namesp ...

  3. .net 超链接传值,传过去始终是null

    今天做了一个删除功能,通过点击列表中的删除超链接,通过get请求,跳转到一个处理程序执行删除操作 . 因为不熟悉各种报错 , <%="<td> <a class='d ...

  4. fping简介及使用方法

    fping命令的官网为:http://fping.org/ 历史版本下载地址:http://fping.org/dist/ 第一步:安装. wget http://fping.org/dist/fpi ...

  5. React和vue的差异和相似地方

    React 单向绑定(加插件后,还是可以双向绑定) Vue 双向绑定 组件化 1. React,需要编写render函数, 2. 当React状态的状态state改变是render就会重新被调用, 重 ...

  6. 论文学习02-《On the Effectiveness of Visible Watermarks》

    I. Estimating the Matted Watermark 给定所有图像中的水印当前估计的区域,我们通过观察这些区域图像梯度的一致性来检测出水印梯度,也就是我们通过计算这些区域的图像梯度的中 ...

  7. 【学术篇】SDOI2008 仪仗队

    Part1:传送门&吐槽 水题... 然而由于线筛里面的\(j\)打成了\(i\)然后就不能1A了OvO Part2:题目分析 这个正方形是对称的... 而且很显然对角线上只有一个点会被看到. ...

  8. Unity开发一些实用的提高效率的技巧

    该文章参考总结自Unity微信官方 原文: Unity小技巧介绍 1 如果编辑器意外崩溃了,但场景未保存,这时可以打开工程目录,找到/Temp/_Backupscenes/文件夹,可以看到有后缀名为. ...

  9. android gradle 和gradle plugin

    android gradle 和gradle plugin 1.安装完AS3.5.2创建完项目一运行,报了如下错误 Error:Could not find com.android.tools.bui ...

  10. hdu多校第二场 1005 (hdu6595) Everything Is Generated In Equal Probability

    题意: 给定一个N,随机从[1,N]里产生一个n,然后随机产生一个n个数的全排列,求出n的逆序数对的数量,加到cnt里,然后随机地取出这个全排列中的一个非连续子序列(注意这个子序列可以是原序列),再求 ...