task code

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();
    }
}

  

时间: 2024-10-12 04:39:03

task code的相关文章

UWP -- Background Task 深入解析

原文:UWP -- Background Task 深入解析 1. 重点 锁屏问题 从 Windows 10 开始,用户无须再将你的应用添加到锁屏界面,即可利用后台任务,通用 Windows 应用必须在注册任何后台触发器类型之前调用 RequestAccessAsync: await BackgroundExecutionManager.RequestAccessAsync(); 资源限制 由于对于内存较低的设备的资源约束,后台任务可能具有内存限制,该限制决定了后台任务可以使用的内存上限 在内存

livereload使用方法

搞这个自动刷新的插件搞了好几个小时了还没搞明白,快被气死了,想改用browser-sync结果npm又一直转啊转一直卡死. 刚才终于神奇地搞定了,结果发现还是我自己智商太低...大概的经过是这样的... 首先如果你没装node/npm/gulp/livereload就别玩了,这个东西离你还很遥远,你甚至要花一些时间去了解这些东西是什么鬼. 然后你还得下载一个livereload的chrome插件,作为chrome的扩张程序用的,把名字贴上来,“chromein.com_ext_11631.crx

uC/OS-II 函数之任务相关函数

获得更多资料欢迎进入我的网站或者 csdn或者博客园 对于有热心的小伙伴在微博上私信我,说我的uC/OS-II 一些函数简介篇幅有些过于长应该分开介绍.应小伙伴的要求,特此将文章分开进行讲解.上文主要介绍了OSInit()初始化函数,本文介绍任务相关的函数:OSTaskCreate()任务创建函数1,OSTaskCreateExt任务创建函数2,OSTaskSuspend()任务挂起,OSTaskResume()唤醒任务 OSTaskCreate()任务创建函数 1.主要作用:建立一个新任务.任

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

一.前言 终于完成windows通用应用“51单片机汇编”,半年前开始玩WindowsPhone开发的第一个真正意义上的App(还很多缺点=_=).开发从1月中旬考完试到今天,期间实习了半个月,玩了几天,算起来基本弄了3个多星期吧.不多说,总结总结. 二.开发数据准备 应用中主要的数据是单片机的汇编指令,我主要用XML文件来储存数据,没有使用SQLLite数据库,数据格式如下图: xml文件的数据是我手输入的,所以这是比较烦的.(可能有更简洁的办法获取数据). 而xml文件每个每个节点对应实例,

Interrupt distribution scheme for a computer bus

A method of handling processor to processor interrupt requests in a multiprocessing computer bus environment is described. This method allows a multiple-tiered, increasing priority, interrupt request scheme. This method also allows processor to proce

14 多线程

多进程与多线程的区别, 本质的区别在于每个进程拥有自己的一整套变量, 然后线程则共享数据. 另外, 与进程比较, 线程更"轻量级", 创建, 撤销一个线程比启动新的进程的开销要小得多. 在实际应用中, 多线程非常有用, 例如: 一个浏览器可以同时下载几幅图片. 如果需要执行一个比较耗时的任务, 应该使用独立的线程. 下面是一个单独线程中执行一个任务的简单过程: 1) 将任务代码移动到实现了 Runnable 接口的类的 run 方法中. class MyRunnable impleme

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

/***********************************************************************************************************                                               uC/OS-II*                                         The Real-Time Kernel**                       

uC/OS-II汇编代码

;********************************************************************************************************;                                               uC/OS-II;                                         The Real-Time Kernel;;                         

【ucosii】笔记1:移植

前言 ucosii的代码,可以分为两部分:与cpu无关的代码,与cpu有关.移植的主要工作就是修改与cpu有关的部分代码. ucosii的代码结构 与cpu无关的代码              与cpu无关的代码 os_config.h 操作系统配置文件 os_cpu.h 处理器相关头文件 ucos_ii.h 操作系统头文件 os_cpu.c 处理器相关c文件 os_core.c 内核 os_cpu_a.asm 处理器相关汇编文件 os_task.c 任务管理     os_time.c 时间管