- 博客(4)
- 收藏
- 关注
原创 【c#异步学习笔记一:基本概念】
1.声明了async的方法就可以使用await来实现异步操作, await 时会释放当前线程,等所 await 的 Task 完成时会从线程池中申请新的线程继续执行 await 之后的代码,这本来是为了解决异步操作(比如IO操作)霸占线程实际却用不到线程的问题。2.因为异步方法的主要目的就是防止阻塞,而在异步方法中await前用的线程仍然是调用其的线程,故要在await之前避免阻塞,把可能阻塞的过程放在await后。异步默认使用线程池。异步编程通常是在新的线程或任务上来执行耗时事件长的函数,从而实现并发。
2023-11-08 12:36:02
236
原创 【c#线程学习笔记三:任务Task】
默认情况下,CLR会将任务运行在线程池线程上,这种线程适合执行短小的计算密集的任务。在线程池上运行一个长时间执行的任务并不会造成问题,但如果要并行运行多个长时间任务(特别是会造成阻塞的任务),则会对性能造成影响。②如果任务是计算密集型,则使用生产者/消费者队列可以控制这些任务造成的并发数量,避免出现线程和进程饥饿的问题。与线程的Join方法类型,调用Task的Wait方法可以阻塞当前方法,直到Task完成。如果在调用Task.Run时传入一个。Task默认使用线程池中的线程,它们都是后台线程。
2023-11-01 22:20:03
415
原创 【c#线程学习笔记二:线程的信号发送和工作线程更新UI】
当前台线程都执行结束时,后台线程随之终止,且后台线程执行栈上的finally语句块都无法执行,如果finally里执行的是清理逻辑等,那么可以在应用程序结束时等待后台线程汇合(Join)来避免前面的问题,不过需要注意的是需要指定一个超时时间,来舍弃那些无法按时完成的后台任务,防止应用程序无法正常关闭。该方法适用于一些工作量较少的线程,在计算密集,特别是带有用户界面的应用程序中,提高进程的优先级可能会抢占其他进程的执行时间,从而影响整个计算机的运行速度。线程间的消息通知即所谓的信号发送。
2023-10-31 21:22:28
156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人