我有類ObserverBase。在Start方法中,我訂閱一個observable,應用一個轉換和一個過濾器。爲什麼SubscribeOn在這裏不能用作擴展方法,而是直接調用?
我不明白爲什麼使用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;
}
}
*「...作爲擴展方法不編譯」* - 您需要提供編譯錯誤。 – jww 2014-09-11 11:30:18