गोलांग में, मैं इरादे पर contexts
पास करने के लिए अन्य तरीकों और कार्यों के लिए काफी नया हूं। मैं समझता हूं कि कैसे context
काम करता है, इसका उपयोग कैसे किया जाता है, यह कैसे मूल्य रखता है, यह माता-पिता context
और उनके व्यवहार से कैसे संबंधित है - मैं पहले संदर्भ में उपयोग करने के लिए क्यों समझ नहीं पा रहा हूं।किसी संदर्भ के बीच निर्णय कैसे लें। डेडलाइन या एक साधारण टाइमर?
एक और विशिष्ट उदाहरण में, जो कंपनी मैं काम करता हूं, उसमें वास्तविक प्रश्न है, हमने कुछ बहुत लंबे समय से चलने वाले प्रश्नों की पहचान की है जो कि किनारे के मामले के कारण अक्सर होते हैं।
एक स्पष्ट समाधान जिसे हमने लेने का फैसला किया, हमारी बाधाओं को देखते हुए जब तक कि हम मूल कारण को ठीक करने के लिए समय निवेश नहीं करते हैं, उन प्रश्नों को मारना है जो 5 मिनट से अधिक समय लेते हैं।
हमारे लेन-देन को चलाने वाली विधि context
स्वीकार करती है जिसे मूल रूप से एपीआई कॉल में शुरू किया जाता है। यह context
लेनदेन समारोह के लिए सभी तरह से पारित किया गया है।
1) एक नया संदर्भ का उपयोग करना::
एक
go routine
में एक नयाcontext.WithTimeout(ctx, time.Duration(5 * time.Minute))
घड़ी
Done
चैनल आरंभ करें और लेन-देन को मारने के उस पल में मुझे लगता है कि क्वेरी को मारने के लिए 2 समाधान पाया जब वहां एक संकेत होता है- यदि लेन-देन समय-समय पर सफलतापूर्वक समाप्त हो गया है, तो संदर्भ
cancel
संदर्भ और लेनदेन को अपेक्षित रूप से प्रतिबद्ध करें।
2) एक Timer
का उपयोग करना:
- एक
Timer
5 के साथ मिनट अवधि - बनाएं समय खत्म हो गया है, तो लेन-देन,
- वरना मारने लेन-देन के लिए प्रतिबद्ध।
तार्किक रूप से, वे एक ही समाधान कर रहे हैं, हालांकि, कब और कैसे एक सेट समय सीमा या एक अच्छे पुराने Timer
के साथ एक context
उपयोग करने के लिए तय करने के लिए?
1,8 [ 'डेटाबेस/sql'] (के रूप में https://golang.org/pkg/database/sql /#DB.BeginTx0Z) किसी संदर्भ के उपयोग का समर्थन करता है। मुझे कल्पना है कि यह आपके निर्णय को सरल बना सकता है। – jmaloney