相关疑难解决方法(0)

从头开始实现IObservable <T>

Reactive Extensions带有许多辅助方法,用于将现有事件和异步操作转换为可观察对象,但是如何从头开始实现IObservable <T>?

IEnumerable有一个可爱的yield关键字,使其实现起来非常简单.

实现IObservable <T>的正确方法是什么?

我需要担心线程安全吗?

我知道有人支持在特定的同步上下文中回调,但这是否是我作为IObservable <T>作者需要担心或者以某种方式内置的内容?

更新:

这是Brian的F#解决方案的C#版本

using System;
using System.Linq;
using Microsoft.FSharp.Collections;

namespace Jesperll
{
    class Observable<T> : IObservable<T>, IDisposable where T : EventArgs
    {
        private FSharpMap<int, IObserver<T>> subscribers = 
                 FSharpMap<int, IObserver<T>>.Empty;
        private readonly object thisLock = new object();
        private int key;
        private bool isDisposed;

        public void Dispose()
        {
            Dispose(true);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing && !isDisposed)
            {
                OnCompleted();
                isDisposed = true;
            }
        }

        protected void OnNext(T value)
        {
            if (isDisposed) …
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

38
推荐指数
3
解决办法
1万
查看次数

RX受试者 - 他们应该避免吗?

我在另一个主题对这个主题进行了一次小型讨论,并希望人们对主题的"坏"方面提出意见.

频繁参与RX论坛的人都知道E.Meijer不喜欢受试者.虽然我对RX创作者的观点有最深刻的敬意,但我已经在多个项目中广泛使用了Subjects几年,并且因为它们没有任何架构问题或错误.

我可以命名的主题的唯一"陷阱"是它们不是"可重用的" - 在完成主题上的可观察对象之后,您需要在新订阅者可以从其接收事件之前重新实例化它.

"代码味道"和"不喜欢它们"需要"实用"示例支持 - 您是否可以引起我们注意使用主题可能导致错误或问题的可能情况?或许你认为它们完全是容易和无害的 - 然后尝试定义它们将被使用的区域.

system.reactive

24
推荐指数
2
解决办法
3980
查看次数

标签 统计

system.reactive ×2

c# ×1