【问题标题】:Threading.Tasks analog in Rx extensions in .NET 3.5?.NET 3.5 中的 Rx 扩展中的 Threading.Tasks 模拟?
【发布时间】:2011-10-17 00:48:42
【问题描述】:
【问题讨论】:
标签:
c#
.net-3.5
system.reactive
【解决方案3】:
System.Threading,TPL 的程序集曾经包含在 Rx 版本中,但现在不再包含。
您也许可以在旧版本中找到它。
也就是说,IObservable<T> 类似于 Task<T>,主要区别在于 Task<T> 只能有 1 个结果,IObservable<T> 是 0 个或多个结果的流。
【解决方案4】:
也许samples from the rx wiki 可以帮助你。
最简单的后台任务是:
var o = Observable.Start
(
() =>
{
Console.WriteLine("Calculating...");
Thread.Sleep(3000);
Console.WriteLine("Done.");
}
);
o.First(); // subscribe and wait for completion of background operation
但您可能还想查看 forkjoin 示例。
【解决方案5】:
.NET 3.5 中的 Rx 不能使用任务,它使用 .NET 3.5 线程池 - 但是,正如 Scott 所说,当 IObservable 是一个项目时,IObservable 的工作方式与任务类似。
【解决方案6】:
如果我在哪里错了,请纠正我。
Observables 和 Observers 主要与任务相关——Observe(等待数据)&Subscribe(让 Observers 获取推送的数据)。
Observable 提供了两个算子来提高上述两个任务的性能。
1)。 Observable.ObserveOn - 在指定的时间表上异步通知观察者。
可以使用 Schedular 以更好的方式执行任务,其中它接受参数中的任何一个
- Scheduler.CurrentThread(观察当前正在运行的线程)
- Scheduler.NewThread(每次都在新线程上观察)
- Scheduler.TaskPool(观察使用TaskPool机制,我想你可能会感兴趣。)
- Scheduler.ThreadPool(使用ThreadPool机制观察)
第二个也一样……
2)。 Observable.SubscribeOn - 异步订阅 - 取消订阅指定调度程序上的观察者。
它还具有与上述相同的选项来安排订阅。
因此,Rx 提供了内置功能来安排您的流程以提供快速结果。