内容目录
背景
我们开发代码经常面对线程的问题,多线程性带来异步方便的同时也带来稳定性问题,所以我们需要解决掉线程问题
解决方案
1:加锁
这种方案基本是解决线程的基本方法,但要求开发者对代码非常清晰,不然很容易死锁。
2:投递回调或者事件到主线程或者同一个线程里面
基本原理尽可能在同一个线程里面,那么就没有线程竞争,这种实现方式基于主线程的队列,我们常常用主线程的消息队列,c# 貌似也是类似。只要事件队列加锁就可以了,那么加锁颗粒就非常少了,我们也可以自己创建一个线程,不停等待任务,然后处理返回数据,那么数据都在所谓的业务主线程。你可以看看很多开源代码基本这么写的,android 事件也类似。android每个线程都有一个时间循环队列,比喻我们请求网络数据后,直接投递数据到android ui的主线程就可以了,那么数据就没有竞争。
3:c#的方式
SynchronizationContext 这个每个线程都有
sync_context.Post(new SendOrPostCallback((o) =>
{
//执行的代码
}), null);
Dispatcher 这个对线所有控件都会继承这个,所以你必须要保留主要界面的 Dispatcher ,但我在开发时候,如果使用不当的话会导致界面很卡,大概是代码里面反复调用导致的问题。