热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《C#高级编程第七版》多线程之Events

按照范例,将代码稍加变动,打出来了,如下所示usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSy

按照范例,将代码稍加变动,打出来了,如下所示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Text;

namespace Demo2
{
    class Program
    {
        static void Main(string[] args)
        {
            const int taskcount = 10;

            //事件数组,记录线程执行状态
            var mevents = new ManualResetEventSlim[taskcount];

            //等待数组,接收事件发出的信号
            var waithandles = new WaitHandle[taskcount];

            //执行具体任务的类
            var calcs = new Calculator[taskcount];

            //任务工厂
            TaskFactory tf = new TaskFactory();


            for (int i = 0; i  data = (Tuple)obj;
            Console.Write("Task {0} starts calculation\r\n", Task.CurrentId);
            Thread.Sleep(new Random().Next(3000));
            TaskID = Task.CurrentId;
            Console.Write("Task {0} is ready\r\n", Task.CurrentId);
            mevent.Set();
        }
    }
}
mevents[index].Reset(); 
将这句屏蔽后,"finished task for"经常是一个固定值,不太理解为什么是这样。
不知道是不是Reset之后,waithandle就失效了,WaitHandle.WaitAny(waithandles)就不会获取重复的记录

《C#高级编程第七版》多线程之Events


推荐阅读
author-avatar
寡妇毒_393
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有