【发布时间】:2014-09-11 07:21:46
【问题描述】:
我有 ObserverBase 类。在 Start 方法中,我订阅了一个 observable,应用了转换和过滤器。
我不明白为什么使用 SubscribeOn 作为扩展方法无法编译。 谁能解释这种行为?
public class ObserverBase<T1, T2> : IPeer<T1, T2>
{
private readonly ISubject<T2> subject;
private readonly IMapper<T1, T2> messageMapper;
protected ObserverBase(ISubject<T2> subject, IMapper<T1, T2> messageMapper)
{
this.subject = subject;
this.messageMapper = messageMapper;
}
public IObservable<T2> Start(IObservable<T1> observable, Func<T2, bool> predicate)
{
//works
Synchronization.ObserveOn(Synchronization.SubscribeOn(observable, TaskPoolScheduler.Default),
Scheduler.Immediate)
.Select(message => this.messageMapper.Map(message))
.Where(predicate)
.Subscribe(observation => this.subject.OnNext(observation));
// compile error on SubscribeOn: The type arguments cannot be inferred from the usage. Try specifying the type argument explicitly.
observable.SubscribeOn(TaskPoolScheduler.Default).ObserveOn(Scheduler.Immediate)
.Select(message => this.messageMapper.Map(message))
.Where(predicate)
.Subscribe(observation => this.subject.OnNext(observation));
// compile error on TaskPoolScheduler.Default: Cannot resolve method SubscribeOn(System.Reactive.Concurrency.TaskPoolScheduler)
observable.SubscribeOn<T1>(TaskPoolScheduler.Default).ObserveOn(Scheduler.Immediate)
.Select(message => this.messageMapper.Map(message))
.Where(predicate)
.Subscribe(observation => this.subject.OnNext(observation));
return this.subject;
}
}
【问题讨论】:
-
"...作为扩展方法无法编译" - 您需要提供编译错误。
标签: c# compiler-errors resharper extension-methods system.reactive