在我的应用程序中,我编写了所有要使用的Rx代码Scheduler.Default.我想知道指定Scheduler.Default和不指定调度程序之间是否存在差异?
采用的策略是System.Reactive.Concurrency.DefaultScheduler什么?
Rx使用适当的策略,该策略取决于加载的平台特定的PlatformServices - 因此您可以在不同的情况下使用不同的方法.OOB实现会查看您的平台上是否有Threads,如果是,则使用Threads和平台Timer实现来计划项目,否则它使用Tasks.例如,后一种情况出现在Windows 8 Apps中.
你可以在这里找到一个关于如何从创建者实现平台服务的好视频:http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RTM-and-RTW
在这里查看有关内置运算符在执行和不指定调度程序时的行为方式的信息:http://msdn.microsoft.com/en-us/library/hh242963(v = vs.103).aspx
是的,指定Scheduler.Default和不指定调度程序之间存在差异.使用Scheduler.Default 将引入异步和可能的并发行为,而不提供调度程序则由运营商自行决定.一些操作符将选择同步执行,而其他操作符将异步执行,而其他操作符将选择跳转线程.
它可能是一个坏主意(因为性能太高,甚至可能是正确性,因为过多的并发性可能会导致陷入死锁状态)以供应Scheduler.Default给每个Rx运算符.如果您没有特定的调度要求,则不要提供调度程序,让操作员选择所需的内容.
例如,
这将同步完成:
int result = 0;
Observable.Return(42).Subscribe(v => result = v);
result == 42;
Run Code Online (Sandbox Code Playgroud)
虽然这将异步完成(可能在另一个线程上):
int result = 0;
Observable.Return(42, Scheduler.Default).Subscribe(v => result = v);
result == 0;
// some time later
result == 42;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1053 次 |
| 最近记录: |