在将任务投入使用之前首先需要考虑任务的工作量。任务可以是短时的突发工作,也可以伴随着整个进程的生命周期。如前所述,名为Task Scheduler的单独TRL类负责在线程池中处理调度和执行任务。创建任务时,开发人员可以注入Task Scheduler“提示”。TaskScheduler会根据这些提示以及计算机可使用的资源调整线程池。
TPL中包含了默认的Task Scheduler。构建自定义Task Scheduler的内容已经超出了范围。
这些代码应该看起来非常熟悉。其计算与原始递归的示例是相同的,目录查询也是相同的。而不同的部分是任务创建、任务等待以及名为cancellations的概念。StartNew(默认Task Scheduler中的一个方法)创建并立即启动任务。
与原始递归的示例一样,上述代码也会遍历目录树。但不同之处在于代码会同时展开搜索所有路径,而不是向下搜索一条路径,而不是向下搜索一条路径,然后回来再向下搜索另一条路径。每一次对子目录的访问都会阻塞父任务,除非所有的子任务都返回结果。想向一下,如果TPL必须在如此小的线程池中调度好几百个任务,那么被阻塞父任务的数量对于TPL来说意味着什么。TPL如何确定先运行哪个任务?TPL并不知道目录树的基本性质。
而此时正是任务创建“提示”的用武之地。下面的代码片段显示了开发人员可用的一些TaskCreationOptions(提示)。
TaskCreationOptions为TPL提供了执行准则。虽然是准则,但是这些选项并不能保证什么。更确切地说,应该将这些选项视为TPL建议。而其他得TPL执行语义则可能重写这些选项。
在示例中,AttachedToParent向TPL建议父任务的结果取决于创建局域网监控系统的任务的结果。而创建连接指令则意味着TPL可以在与父任务相同的线程中执行子任务。
例如,子任务以及子任务的局域网监控系统的子任务都可以在相同的线程中执行。由于解决方案可以创建数百个任务,所有如果可以在相同的线程中运行子任务,就不需要因为等待其子任务完成而占用多个阻塞线程。TPL文档将这种行为简称为内联任务。
如前所述,父任务将被阻塞直到其子任务完成。在示例中,childTasks负责存储子任务。而Wait All所完成的操作就好像其名称所暗示的那样,它阻塞Wait All调用直到所有任务完成。当child Tasks变量中的每一个任务都执行了返回带有docx扩展名的文件所占用的字节总数的函数时,可以通过Result属性获取该返回值。
创建带有Long Running TaskCreationOption提示的根父局域网监控系统的任务。而该提示告诉TPL该任务可能需要单独的线程。由于值是在每个子任务中相加最后得到的,所以根子目录的总数页就是所有子目录的总数。当父根任务的所有子任务完成时,所有任务也就执行完毕。
★关于WorkWin公司电脑监控软件★
WorkWin的使命是打造Work用途的Windows 电脑系统,有效规范员工上网行为,让老板知道员工每天在做什么(监控包括屏幕、上网在内的一举一动),限制员工不能做什么(禁止网购、游戏、优盘等)。
WorkWin基于纯软件设计,非常容易使用,无需添加或改动任何硬件,使用一台管理机监控全部员工机电脑。历经南京网亚十余年精心打造,此时此刻每天都有成千上万企业电脑正在运行WorkWin,选择WorkWin选择“赢”。
版权所有,南京网亚计算机有限公司 。本文链接地址: 局域网监控系统的应用任务