C#—多线程

Task:

Task(任务) 是在 ThreadPool(线程池)的基础上推出的。

* ThreadPool中有若干个数量的线程,如果有任务需要处理时,会才从栈程池中获取一个空闲的线程来执行任务,任务执行管完毕后线程不会销毁。而是被线程池回收供以后使用。

* 当线程池中所有的线程都在忙碌,又有新的任务进来,线程池一般会新建一个线程来处理这个任务,如果线程池数量达到上限,任务会排队,等待其他任务释放线程后再执行。

* 这样操作线程池能减少线程的创建,节省开销。

异步操作:

1. new 方式来创建一个task,需要调用的时候再执行。
cs 复制代码
        Task task = new Task(() =>
            {
                Thread.Sleep(1000);
                Console.WriteLine($"task的进程的id为:{Thread.CurrentThread.ManagedThreadId}");
            });
2.调用一个任务
cs 复制代码
task.Start();
            Task task2 = new Task(() =>
            {
                Thread.Sleep(1000);
                Console.WriteLine($"task2的进程的id为:{Thread.CurrentThread.ManagedThreadId}");
            });
            task2.Start();
3.同步执行"按照从上至下的顺序"。
cs 复制代码
 Fun2();
            Console.WriteLine("===============");
            Fun();

            Console.ReadLine();
        }

        static void Fun()
        {
            Thread.Sleep(1000);
            Console.WriteLine("hello1");
        }
        static void Fun2()
        {
            Thread.Sleep(1000);
            Console.WriteLine("hello2");
        }
    }
}

异步方法

同步操作读取文件函数
cs 复制代码
 public static string Fn1()
 {
     FileStream file = new FileStream(@"text.txt",FileMode.Open);
     byte[] buffer = new byte[file.Length];
     file.Read(buffer,0,buffer.Length);
     string res = Encoding.UTF8.GetString(buffer);
     return res;
 }
异步操作读取文件函数
cs 复制代码
 async public static Task<String> Fn2()
 {
     FileStream file = new FileStream(@"text.txt",FileMode.Open);
     byte[] buffer = new byte[file.Length];
     file.Read(buffer, 0, 10);
     string res = Encoding.UTF8.GetString(buffer);
     return res;
 }
相关推荐
love530love14 分钟前
命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践
开发语言·人工智能·windows·python·conda·uv
工藤新一OL19 分钟前
把xml的格式从utf-8-bom转为utf-8
xml·c#·asp.net·.netcore·visual studio
陪我一起学编程36 分钟前
MySQL创建普通用户并为其分配相关权限的操作步骤
开发语言·数据库·后端·mysql·oracle
麦子邪39 分钟前
C语言中奇技淫巧04-仅对指定函数启用编译优化
linux·c语言·开发语言
破刺不会编程1 小时前
linux线程概念和控制
linux·运维·服务器·开发语言·c++
henreash1 小时前
NLua和C#交互
开发语言·c#·交互
萌新小白的逆袭2 小时前
《Maven 核心基础笔记(第一天)》
java·开发语言·spring
苦学编程的谢2 小时前
MyBatis_3
java·开发语言·后端·mybatis
go54631584653 小时前
Python点阵字生成与优化:从基础实现到高级渲染技术
开发语言·人工智能·python·深度学习·分类·数据挖掘
猫头虎3 小时前
2025年02月11日 Go生态洞察:Go 1.24 发布亮点全面剖析
开发语言·后端·python·golang·go·beego·go1.19