线程
线程
创建
1 | Thread thread1 = new Thread(Methode); |
开始
1 | thread1.Start(); |
等待完成
1 | thread1.Join(); |
优先级
1 | thread1.Priority=ThreadPriority.Highest;//优先级和线程调度器时间片都会影响顺序 |
名字
1 | thread1.Name="001"; |
当前线程优先级
1 | Thread.CurrentThread.Priority=ThreadPriority.Normal; |
锁
1 | lock (counterLock) { counter += 1; } |
监视器
1 | //尝试进入临界区 |
互斥锁
1 | //可在进程内,也跨进程,filePath:共享的互斥体 |
读写锁
1 | bool lockAcquired = false; |
信号量
1 | using SemaphoreSlim semaphore = new SemaphoreSlim(initialCount: 3, maxCount: 3);//设置线程数量 |
1 | semaphore.Wait();//等待信号量,数量-1,等待和释放不必在同一个线程中 |
自动重置事件
1 | using AutoResetEvent autoResetEvent = new AutoResetEvent(false);//初始信号false |
手动重置事件
1 | using ManualResetEventSlim manualResetEvent = new ManualResetEventSlim(false); |
双向信号传递
1 |
|
死锁
1 | object userLock=new object(); |
线程的状态
1 | thread1.ThreadState |
线程池
1 | ThreadPool.QueueUserWorkItem(ProcessBooking,input); |
线程中的异常处理
1 | var exceptions = new List<Exception>(); |
任务
1 | await Task.Run(() => Console.WriteLine("888")); |
从任务返回结果
1 | var tasks = Task.Run(() => |
Wait,WaitAll,Result
1 | task.Wait();//等待任务完成 |
ContinueWith
1 | using System.Text.Json; |
WhenAll、Any
1 | //Console.WriteLine((tasks.Sum(t => t.Result)));//会阻塞主线程 |
延续链与解包
1 | using System.Text.Json; |
任务中的异常处理
1 | var task1 = client.GetStringAsync("https://pokeapi123.co/api/v2/pokemon"); |
1 | var tasks = new[] |
1 | using System.Text.Json; |
任务取消
1 | using var cts=new CancellationTokenSource(); |
异步
异步与Await概述
1 | using System.Text.Json; |
1 | namespace 异步与Await基本语法 |
Await前后使用的是哪个线程
1 | namespace 异步与Await基本语法 |
返回值后的延续,改自“延续链解包”
1 | using System.Text.Json; |
异步方法中的异常处理
1 | var tasks = new[] |
Await和同步上下文
1 | private async void button1_Click(object sender, EventArgs e) |
并行循环
1 |
|
并行循环异常处理
1 |
|
并行循环Stop
1 | //添加state参数 |
并行循环Break
1 | Parallel.For(0, array.Length, (i, state) => |
并行循环Result
1 |
|
并行循环取消
1 |
|
并行循环线程存储变量
1 | var startTime = DateTime.Now; |
PLINQ
1 | var items = System.Linq.Enumerable.Range(0, 200); |
PLINQ缓冲模式
1 | var items = System.Linq.Enumerable.Range(0, 2000); |
PLINQ异常处理
1 | var items = System.Linq.Enumerable.Range(0, 20); |
PLINQ取消
1 | var items = System.Linq.Enumerable.Range(0, 20); |
并发栈
1 | var stack=new ConcurrentStack<int>(); |
并发队列、阻塞集合
1 |
|
评论