ObserveOnMainThread()
SubscribeOnMainThread()
Cast<>()
PublishLast()
RepeatSafe()
Replay()
Catch()
CatchIgnore()
ObserveOnMainThread
UniRx特有的字段,将一个流转移到主线程进行观察
执行结果
代码示例
public class No15_Mixed5 : MonoBehaviour
{
void Start()
{
var @return = Observable.Return(100, Scheduler.CurrentThread);
var mainThread = @return.ObserveOnMainThread();
mainThread.Subscribe(Next, Error, Complete);
}
void Next(int val)
{
Debug.LogFormat("Return返回的数据:{0}", val);
}
void Error(Exception ex)
{
Debug.LogException(ex);
}
void Complete()
{
Debug.LogFormat("Complete");
}
}
代码解析
UniRx每一个字段你都可以指定一个线程让流执行,可以被执行到的线程包括
名称 | 主线程 | 说明 |
---|---|---|
ThreadPool | 否 | 让流在线程池里面执行 |
CurrentThread | - | 当前运行的线程执行 |
MainThread | 是 | 直接主线程执行 |
MainThreadFixedUpdate | 是 | 主线程的FixedUpdate方法执行 |
Immediate | - | 当前线程Context立即执行 |
MainThreadEndOfFrame | 是 | 主线程的EndFrame方法执行 |
MainThreadIgnoreTimeScale | 是 | 主线程里面忽略时间缩放执行 |
SubscribeOnMainThread
UniRx特有,在主线程里面执行订阅,功能和ObserverOnMainThread差不多,些许差别,看解析
执行结果
示例代码
代码解析
两个差不多的方法,使用的时候主要区别在于业务需求;如果你过程处理的时候需要在主线程里面执行,则使用ObserveOnMainThread将过程处理中的数据分离开来;如果你只是将计算的结果放到主线程里面来执行,则使用SubscribeOnMainThread方法。
Cast
将一个包装类型转换到一个其他的包装类型,动态变更流的数据包装类型
执行结果
代码示例
public class No15_Mixed5 : MonoBehaviour
{
void Start()
{
Subject<object> subject = new Subject<object>();
var cast = subject.Cast<object, string>();
var disposable = cast.Subscribe(Next, Error, Complete);
disposable.AddTo(gameObject);
subject.OnNext