首页 > 系统相关 >C# 中使用主进程及子线程

C# 中使用主进程及子线程

时间:2023-01-11 11:44:21浏览次数:34  
标签:10 Task Console C# 及子 TaskCreationOptions 线程 new

 1 using System;
 2 using System.Threading;
 3 using System.Threading.Tasks;
 4 
 5 namespace ThreadTest
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11             Task parentTask = new Task(() =>
12             {
13                 Task task1 = new Task(() => { calculate1(); }, TaskCreationOptions.AttachedToParent);
14                 Task task2 = new Task(() => { calculate2(); }, TaskCreationOptions.AttachedToParent);
15                 task1.Start();
16                 task2.Start();
17             });
18             parentTask.Start();
19             Console.WriteLine("启动主线程");
20             parentTask.Wait();
21             Console.WriteLine("线程全部完成!");
22             Console.Read();
23         }
24      
25         static void calculate1()
26         {
27             int i = 0;
28             while (i++ < 10)
29             {
30                 Thread.Sleep(new Random().Next(10, 100));
31                 Console.WriteLine("Task 1:" + i);
32             }
33         }
34 
35         static void calculate2()
36         {
37             int i = 0;
38             while (i++ < 10)
39             {
40                 Thread.Sleep(new Random().Next(10, 100));
41                 Console.WriteLine("Task 2:" + i);
42             }
43         }
44     }
45 }

运行结果:

启动主线程
Task 2:1
Task 1:1
Task 1:2
Task 2:2
Task 1:3
Task 2:3
Task 1:4
Task 2:4
Task 1:5
Task 2:5
Task 2:6
Task 1:6
Task 1:7
Task 2:7
Task 1:8
Task 2:8
Task 1:9
Task 2:9
Task 2:10
Task 1:10
线程全部完成!

当要执行的线程任务比较耗时时,建议在创建线程对象时传入参数TaskCreationOptions.LongRunning,以此来声明为长时间运行的线程任务。
默认情况下,新建Task线程是从线程池ThreadPool中分配出来的,当使用TaskCreationOptions.LongRunning声明后则是直接新建一个线程。这样就可以避免耗时任务一直占用线程池资源的情况。当然了,也可以直接使用Thread,效果上是一样的。

标签:10,Task,Console,C#,及子,TaskCreationOptions,线程,new
From: https://www.cnblogs.com/kenlewis/p/17043285.html

相关文章

  • 技术分享| anyRTC 视频监控融合方案
    视频监控系统在各行业应用广泛,从早期的只是简单的实现通过视频记录监控区域的情况,到现在的监控侦测、智能报警、融合通信等功能,视频监控的作用已经不是简单的记录,分布在各地......
  • Replace into与Merge into的用法总结
    MySQL数据插入问题MySQL中常用的三种插入数据的语句:insertinto:表示插入数据,数据库会检查主键,如果出现重复会报错;replaceinto:表示插入替换数据,需求表中有PrimaryKey,或......
  • Microsoft Office LTSC 2021 for Mac(office系列全套装) v16.69激活版
    哪里有全套装的office 2021mac版下载?office2021是一款由微软官方提供的最新office办公软件。office2021forMac从头开始设计,以利用最新的Mac功能,包括Retina显示、......
  • C#中的IntPtr
    最近在看公司的一个项目时,发现里面有用到IntPtr这种类型,由于做了一些学习,特记录如下公司的项目是用C#写的,但是还有很大一部分Legacy的code是用C++写的,所以就涉及到在C#中......
  • Manjaro(ArchLinux)每次开机要求输入 kde 钱包的密码
    依次打开:系统配置---个性化---账户详细信息---kde钱包1.启用kde钱包子系统,否则无法正常使用记录的账号密码信息2.打开右下角的调用钱包管理器,修改密码,设置为空密码即可3......
  • vscode快捷键
    alt+鼠标左键添加cursorshift+alt+down在当前cursor下一行添加cursorshift+alt+up在当前cursor上一行添加cursorshift+alt+left减小工作区shift+alt+right增加工作区s......
  • [完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分
    在线VisualParadigm-UML编辑器使用在线UML编辑器轻松绘制UML图,其中包含功能强大的UML编辑工具,即时UML语法检查和整洁的用户界面。VisualParadigm在线UML图,如类,用例,序列......
  • Requests+Etree+BeautifulSoup+Pandas+Path+Pyinstaller应用 | 获取页面指定区域数据
    (Requests+Etree+BeautifulSoup+Pandas+Path应用|获取页面指定区域数据存入html、excel文档)1需求来源获取网页指定区域数据,并进行保存;简单说就是pachong的需求了。......
  • [完全免费] 在线UML Activity Diagram 活动图工具 - 教程第5部分
    活动图与业务工作流程图类似,或者简单地说是具有更丰富语义的流程图。它描述了系统活动或进行活动的人员以及这些活动的顺序流程。活动图是与面向对象方法相关的UML图之一,因......
  • C# 彻底修改解决方案名称
    1.修改之前一定要先备份修改失败了,没有备份就得炸裂,一定要切记 2.修改项目的名称右键项目->属性->应用程序先将程序集名称与默认命名空间先修改好   其......