C#—多线程
Task:
Task(任务) 是在 ThreadPool(线程池)的基础上推出的。
* ThreadPool中有若干个数量的线程,如果有任务需要处理时,会才从栈程池中获取一个空闲的线程来执行任务,任务执行管完毕后线程不会销毁。而是被线程池回收供以后使用。
* 当线程池中所有的线程都在忙碌,又有新的任务进来,线程池一般会新建一个线程来处理这个任务,如果线程池数量达到上限,任务会排队,等待其他任务释放线程后再执行。
* 这样操作线程池能减少线程的创建,节省开销。
异步操作:
1. new 方式来创建一个task,需要调用的时候再执行。
Task task = new Task(() =>{Thread.Sleep(1000);Console.WriteLine($"task的进程的id为:{Thread.CurrentThread.ManagedThreadId}");});
2.调用一个任务
task.Start();Task task2 = new Task(() =>{Thread.Sleep(1000);Console.WriteLine($"task2的进程的id为:{Thread.CurrentThread.ManagedThreadId}");});task2.Start();
3.同步执行“按照从上至下的顺序”。
Fun2();Console.WriteLine("===============");Fun();Console.ReadLine();}static void Fun(){Thread.Sleep(1000);Console.WriteLine("hello1");}static void Fun2(){Thread.Sleep(1000);Console.WriteLine("hello2");}}
}
异步方法
同步操作读取文件函数
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;}
异步操作读取文件函数
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;}