- 博客(4)
- 收藏
- 关注
原创 C# Async方法与Task.Run()的区别
Task.Run强行从线程池抓了一个线程,让它去执行某个任务或方法。当前线程(UI线程)确实也没有阻塞,当时后台占用了一个线程全程陪跑。如果有多个这样的任务,就意味着占用多个线程,内存和线程池很快就会开销完。几百万条数据的汇总计算、图片处理、解压/压缩文件等,则需要使用Task.Run,因为这些操作都是CPU密集型操作,需要占用CPU核心去算,为了不卡UI线程,只能把它丢到后台线程去跑。当执行到await时,这个方法会立即释放当前线程(比如UI线程),并告诉系统:执行完了再叫我吧。此时线程没有阻塞占用。
2026-08-16 16:21:06
220
原创 C# WinForm控件与UI线性安全
上面示例代码可以看到,一般情况下,我们使用async/await异步编程,不需要用到Invoke。await之后的代码在执行完毕后,默认回到UI线程(因为SynchronizationContext被捕获),所有后面我们可以直接操作控件,不需要使用Invoke。①使用了ConfigureAwait(false),意思是执行完成不会自动回到原来线程,这种情况下需要使用Invoke手动回到原来UI线程(一般执行异步方法不用设置,默认是ConfigureAwait(true)执行完自动回到原来主线程)
2026-08-16 15:37:29
169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅