एक सी # (.NET 4.0) अनुप्रयोग में, मैं समेकित एक्सटेंशन (2.0.20823.0) का उपयोग समेकित मूल्यों में समूहबद्ध करने के लिए समय सीमाएं उत्पन्न करने के लिए करता हूं। परिणामस्वरूप डेटाबेस में प्रश्नों को सरल बनाने के लिए, इन सीमाओं को पूर्ण घंटों (या नीचे दिए गए उदाहरण में सेकंड) पर गठबंधन करने की आवश्यकता है।अवलोकन करने योग्य। टिमर(): टाइमर बहाव से कैसे बचें?
Observable.Timer()
का उपयोग करना:
var time = DefaultScheduler.Instance;
var start = new DateTimeOffset(time.Now.DateTime, time.Now.Offset);
var span = TimeSpan.FromSeconds(1);
start -= TimeSpan.FromTicks(start.Ticks % 10000000);
start += span;
var boundary = Observable.Timer(start, span, time);
boundary.Select(i => start + TimeSpan.FromSeconds(i * span.TotalSeconds))
.Subscribe(t => Console.WriteLine("ideal: " + t.ToString("HH:mm:ss.fff")));
boundary.Select(i => time.Now)
.Subscribe(t => Console.WriteLine("actual: " + t.ToString("HH:mm:ss.fff")));
आप देख सकते हैं कि इरादा और टाइमर के वास्तविक समय के अलावा काफी भारी बहाव टिक्स:
ideal: 10:06:40.000
actual: 10:06:40.034
actual: 10:06:41.048
ideal: 10:06:41.000
actual: 10:06:42.055
ideal: 10:06:42.000
ideal: 10:06:43.000
actual: 10:06:43.067
actual: 10:06:44.081
ideal: 10:06:44.000
ideal: 10:06:45.000
actual: 10:06:45.095
actual: 10:06:46.109
ideal: 10:06:46.000
ideal: 10:06:47.000
actual: 10:06:47.123
actual: 10:06:48.137
ideal: 10:06:48.000
...
मैं भी एक HistoricalScheduler
और निश्चित रूप से का इस्तेमाल करते हैं मुझे वहां कोई समस्या नहीं है। मैं मामूली त्रुटियों को सहन कर सकता हूं और मुझे सिस्टम घड़ी में बदलावों की परवाह करने की आवश्यकता नहीं है। उन पर्यवेक्षकों द्वारा ट्रिगर किए गए कोई हेवीवेट ऑपरेशन नहीं हैं।
इसके अलावा, मुझे पता है कि इस blog post में आरएक्स टाइमर बहाव की समस्याओं की लंबी चर्चा है, लेकिन मुझे लगता है कि यह मेरे सिर को लपेटने में सक्षम नहीं है।
समय-समय पर व्यवस्थित टाइमर बहाव के बिना Observable
शेड्यूल करने का सही तरीका क्या होगा?
धन्यवाद मेरी समस्या को हल करने के लिए बहुत बढ़िया, उत्कृष्ट उत्तर और पर्याप्त सटीक। अफसोस की बात है, मैंने पहले से ही इस पर शासन कर दिया था क्योंकि 'अवलोकन योग्य। जनरेट() 'मुझे [संबंधित परिदृश्य] में सिरदर्द दे रहा है (http://stackoverflow.com/questions/13462713/why-does-observable-generate-throw- सिस्टम-stackoverflowexception)। ऐसा लगता है कि जब भी मैं आरएक्स से संबंधित एक प्रश्न पूछता हूं :-) –
ठीक है, आरएक्स स्रोतों में टिप्पणियों को इंगित करने के लिए धन्यवाद, हर बार जब मैं अपने हार्डवेयर को अच्छी तरह से जानता हूं। ऐसा लगता है कि मुझे उन्हें अधिक बार जांचना चाहिए, अब वे उपलब्ध हैं। –