ما هو الفرق العملي بين كل هذه الامتدادات التي يمكن ملاحظتها التفاعلية؟
-
24-09-2019 - |
سؤال
بالنظر إلى السلوكيات ، ما هو الفرق العملي بين استدعاء كل هذه الوظائف المختلفة عليها؟
- أولاً()
- آخر()
- أحدث Value ()
- mostrecentvalue ()
- NextValue ()
- غير مرتبطة()
- خذ 1)
على افتراض أنني أفهم ذلك بشكل صحيح ، ينبغي أن يفعلوا جميعًا حيال نفس الشيء ، بالنظر إلى السلوكيات.
إذا كان الأمر كذلك ، فما هي المكالمة الأكثر ملاءمة (التي أعني بها: أي أفضل ما ينقل نيتي)؟ أولا أو واحد ربما؟
إذا لم يكن كذلك ، فما هي الاختلافات العملية؟
المحلول
أولاً ، أخيرًا ، وفردي يحظرون ؛ يوصى باستخدام Take (1) بدلاً من ذلك ، بحيث تحصل على عودة قابلة للرسو. عند تصنيف مشغلي الاستعلام ، يوصى بتجنب أولاً ، أخيرًا وفردي لأنك تخرج من سلامة الموناد ... وهذا يعني أن لديك آثارًا جانبية حظر. نرى http://blogs.msdn.com/jeffva/archive/2009/12/09/first-last-contains-etc-can-be-extremely-dangerour-yet-extremely-useful.aspx لمعرفة المزيد عن ذلك.
تمت إزالة MoStrecentValue وأحدث Value من أحدث إصدار من RX لأنهم يحجبون أيضًا ، وبالتالي فإن عوامل الحظر الوحيدة المتبقية هي الأولى والأخير والفردية (ومتغيرات XXXORDEFAULT) ، وفقًا لأحدث ملاحظات الإصدار.
ستعيد MoStrecent أخذ عينات من القيمة الأخيرة ، كما هو الحال في كثير من الأحيان (ويستغرق الأمر القيمة الأولية لضمان عدم الانتظار أبدًا) ، أي "بدون استهلاك" ، في حين أن الأحدث سوف تنتظر حتى تصل القيمة ثم إرجاعها "مع الاستهلاك" - هذا هو ، إذا اتصلت بالأحدث مرة أخرى ، فلن تُرجع نفس القيمة مثل المكالمة الأخيرة ، فستنتظر حتى تصل القيمة التالية ، إن وجدت.
نصائح أخرى
شكرًا @Richardhein على الإجابة العظيمة.
يجب نقل طرق تمديد الحظر حقًا إلى مساحة الاسم الخاصة بهم ، لذلك يتعين على المطور اختيار تضمينها على وجه التحديد لمشروع (أو على وجه التحديد ملف CS). يمكنك إضافة طن من التعقيد مع RX ، ومن خلال استخدام طريقة الحظر بطريق الخطأ ، تقوم بإعدادها بشكل أساسي إلى Ilist/ienumerable.
أعتقد أن هذا هو أكبر خطأ ارتكبه فريق RX ، Iow أعتقد من خلال تضمين هذه افتراضيًا ، فقد فاتهم "حفرة النجاح" مع RX. إصلاح هذا وأسمي RX واجهة برمجة التطبيقات المفضلة عند الانتقال إلى ما بعد التزامن واحد + async في C# (أي لماذا .NET أقوى من قول NodeJs).