2015-06-05 3 views
6

यह समझने के बारे में एक और सवाल है कि कैसे और कब प्रदान की गई रद्दीकरण टोकन उदाहरण के माध्यम से नैन्सी एक एसिंक अनुरोध हैंडलर को रद्द कर सकता है।एन्सीक के लिए नैन्सी का रद्दीकरण टोकन कहां से अनुरोध किया गया है और इसे कब रद्द किया जाता है?

असल में जो मैं सोच रहा हूं वह है कि टोकन की क्या स्थितियां हैं ICancellationRequested सत्य पर सेट है - क्या यह कहीं दस्तावेज या समझाया गया है?

नैन्सी एसिंक हैंडलर को कैसे संभालता है जो 'कभी' वापस/समय में नहीं लौटाता है? और 'समय में' के बारे में: क्या एक टाइमआउट/सीमा है जिसके बाद हैंडलर रद्द हो जाते हैं?

उत्तर

0

यह रद्दीकरण टोकन की सुंदरता है, आपको यह जानने की जरूरत नहीं है कि वे कैसे सेट करते हैं। यह आपको पूरी तरह से टोकन प्रदान करने वाले व्यक्ति तक है। आप सिर्फ टोकन को देखने के लिए देखते हैं और देखते हैं कि यह सेट किया गया है या नहीं।

यदि आप एक ऐसी विधि को कॉल कर रहे हैं जो CancellationToken स्वीकार करता है और आप जानना चाहते हैं कि जब भी आप चाहें सेट कर सकते हैं, तो आपको टोकन बनाने के लिए CancellationTokenSource का उपयोग करना चाहिए; आप सीटीएस का उपयोग उस टोकन को रद्द करने के लिए कर सकते हैं जो इसे उत्पन्न करता है, या इसे निर्धारित अवधि के बाद रद्द कर दिया जाता है।

+0

यह सब ठीक है - कोड स्वयं को कब और कैसे परवाह नहीं करता है - यह कब और जितनी जल्दी हो सके अनुरोध करता है। जैसा कि मैंने कहा, यह वह है जो समझना चाहता है कि नैन्सी कैसे और कब करता है। –

+0

@ जोर्गेबी। आप * नहीं कर सकते हैं। यह * जानबूझकर आपके द्वारा अस्पष्ट है * कैलकुलेशन रद्दीकरण रद्द करने के बारे में कॉल करने का इरादा रखने के विशिष्ट तंत्र को जानने के लिए। कैसे * आप * संभवतः पता कर सकते हैं? टोकन के एपीआई में जो कुछ भी किया जा सकता है, वह यह है कि यह निर्धारित करने के लिए कि क्या इसे वर्तमान में रद्द कर दिया गया है या रद्द होने पर निकाला जाने के लिए इवेंट हैंडलर को पंजीकृत करने के लिए। बस। यदि आप कुछ और चाहते हैं तो आपको इसके लिए अपना स्वयं का तंत्र बनाना होगा। – Servy

+5

धन्यवाद लेकिन आप मुझसे पूछे गए प्रश्न को याद कर रहे हैं - मैं CancellationTokens की सामान्य अवधारणा के बारे में बात नहीं कर रहा हूं या सोच रहा हूं। जैसा कि मैंने कहा, यह अच्छी तरह से समझा जाता है। मैं नैन्सी के बारे में उत्सुक हूँ। और इसके async हैंडलर। यह गलत, अजीब दिशा में बदल रहा है। मैं (व्यक्ति, मेरा कोड नहीं) नैन्सी और इसके एसिंक हैंडलर मैकेनिक्स में रूचि रखता हूं। अगर कोई जानता है और कहता है कि इसे Asp.Net से 1: 1 अग्रेषित किया गया है .. मैं खुश हूं। यदि और भी है, तो मुझे इसमें दिलचस्पी है। –

1

प्रत्येक रद्दीकरण टोकन कहीं से आता है, और कहीं भी इसकी रद्दीकरण टोकनसोर्स है।

जब आप CancellationTokenSource.Cancel को कॉल करते हैं, तो इससे बनाए गए प्रत्येक टोकन को ध्वजांकित किया जाता है।


मज़ेदार तथ्य: CancellationToken एक struct, जो आप इसे एक समारोह को पारित या एक चर यह एक नई प्रतिलिपि बनाता है के लिए असाइन करें हर समय का मतलब है। चूंकि स्रोत उन सभी प्रतियों का ट्रैक नहीं रख सकता है, इसलिए हमारे पास रद्दीकरण टोकन नहीं है। IWasCancelled ईवेंट। इसके बजाए, जब आप IsCancellationRequested को कॉल करते हैं, तो टोकन को इसके स्रोत से पूछना पड़ता है।

रेफरी: https://msdn.microsoft.com/en-us/library/system.threading.cancellationtokensource(v=vs.110).aspx


तो वापस नैन्सी के लिए जा रहा, CancellationTokenSource के लिए अपने स्रोत कोड की खोज और आप अपने जवाब मिल जाएगा। मैंने देखा केवल एक ही है।

https://github.com/NancyFx/Nancy/blob/8a29b0495bfac4806536327c4d78de1ee59bd513/src/Nancy/NancyEngine.cs

3

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन मैं अपने एक ही स्थिति में था और मैं मैं एक जवाब कम से कम अगर आप Owin उपयोग कर रहे हैं अपने अनुप्रयोग की मेजबानी के लिए मिला (Nancy.Owin उपयोग करते हुए) लगता है।

CancellationToken सीधे ओविन से IOwinRequest.CallCancelled संपत्ति (Nancy source code और used here) के माध्यम से आता है। अनुरोध रद्द होने पर यह टोकन ओविन द्वारा सेट किया जा सकता है (उदाहरण के लिए जबरन HTTP कनेक्शन बंद कर दिया गया है)।

संबंधित मुद्दे

 संबंधित मुद्दे