كيف أقوم بإنشاء قابلة للرسو يرجع قيمة كل ثوانٍ دون تخطي أي

StackOverflow https://stackoverflow.com/questions/3858929

  •  27-09-2019
  •  | 
  •  

سؤال

كان هذا المثال أدناه محاولتي للقيام بذلك:

var source
    = Observable.Sample(
          Observable.Range(1, int.MaxValue), TimeSpan.FromSeconds(2));

ولكن عندما أقوم بتشكيل () إلى ذلك وإخراجه إلى وحدة التحكم ، فإنه يظهر تسلسلًا كهذا ، إخراج خط واحد كل ثانيتين:

OnNext: 312969
OnNext: 584486
OnNext: 862009

من الواضح أن .range () يمكن ملاحظته في حين أن .sample () يمكن ملاحظته في انتظار ثانيتين بين كل مخرج. أود أن أعرف كيفية إنشاء ملف يمكن ملاحظته ولكن هذا لا يسمح بتخطي القيم ، لذلك من الواضح أن هذا سيبدو هكذا:

OnNext: 1
OnNext: 2
OnNext: 3

مع قيمة واحدة من .Range () الإخراج كل 2 ثانية. كيف يمكنني إنجاز هذا في الامتدادات التفاعلية لـ .NET؟

هل كانت مفيدة؟

المحلول

لقد اقتربت من هذا مؤخرًا عن طريق إنشاء ملف يمكن ملاحظته التي تنبعث من الأحداث الموقوتة كل timeInterval. يمكنك بعد ذلك استخدام طريقة zip لإلغاء الأحداث من الملاحظة مع تلك الموجودة في المؤقت يمكن ملاحظتها.

على سبيل المثال:

    var timer = 
        Observable
            .Timer(
                TimeSpan.FromSeconds(0), 
                TimeSpan.FromSeconds(2)
            );
    var source = Observable.Range(1, int.MaxValue);
    var timedSource = source.Zip(timer,(s,t)=>s);
    timedSource.Subscribe(Console.WriteLine);

نصائح أخرى

باستخدام الملاحظة.

var source = Observable.GenerateWithTime(1, _ => true, x => ++x, x => x, x => TimeSpan.FromSeconds(2));

قابل للملاحظة. يستخدم Range. يمكن أن يكون هناك العديد من الطرق الأخرى.

للاطلاع على شيء أكثر تقدماً ، مثل التعامل مع الأحداث بنفس الطريقة (لأن هذا لن يساعد إلا إذا كنت تقوم بإنشاء البيانات بنفسك) ، انظر كيف تتفوق على دفق الحدث باستخدام RX؟ الذي يتعامل مع هذه المشكلة وتم حله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top