मैं कुछ एसिंक्रोनस ऑपरेशंस कर रहा हूं और यदि मैं उदाहरण के लिए उपयोगकर्ता अनुरोध करता हूं तो एसिंक कार्य को रोकने से रोकने के लिए मैं रद्द करना टोकन का उपयोग करना चाहता हूं। ऐसा करने के लिए यह एक अच्छा अभ्यास है जिसमें एक शब्दकोश है जिसके साथ मैं सही ऑपरेशन को रोकने के लिए सही थ्रेड पा सकता हूं?रद्दीकरण टोकन स्रोत उदाहरण
public Dictionary<Thread, CancellationToken> CancellationTokenData;
इस प्रकार, उपयोगकर्ता एक ऑपरेशन इसे सही ढंग से व्यवहार करना चाहिए अगर मैं गलत नहीं हूँ पर रद्दीकरण का अनुरोध करता है, तो: क्या मैं वर्तमान में देख रहा हूँ पीछा कर रहा है?
ऐसा करने के लिए सबसे अच्छे अभ्यास क्या हैं?
उदाहरण के लिए कहें कि उपयोगकर्ता थ्रेड {बी} का उपयोग कर डेटाबेस के अंदर एक सेट {ए} पर कुछ बहुत लम्बे ऑपरेशन निष्पादित करता है। फिर वह ऑपरेशन रद्द कर देता है और चला जाता है और दूसरे धागे से सेट {ए} पर एक और लंबा ऑपरेशन का उपयोग करता है। क्या मुझे वर्तमान CancellationToken
के लिए वैश्विक चर का उपयोग करना चाहिए?
मैं नहीं कह सकता कि मैं समझ रहा हूं कि आप क्या पूछ रहे हैं लेकिन रद्दीकरण बहुत सरल हैं और धागे का ट्रैक रखने का कोई कारण नहीं है। आप रद्दीकरण टोकनसोर्स बनाते हैं और किसी भी लंबे ऑपरेशन के लिए टोकन पास करते हैं, यानी कोई विधि जो रद्दीकरण टोकन स्वीकार करती है। क्लाइंट 'स्रोत' को निरस्त करने के लिए कहता है, स्रोत टोकन सिग्नल करता है, कोई भी * ऑपरेशन * जो मॉनीटर को गहराई से समाप्त करता है। यह ऑपरेशन/विधि है जो धागा नहीं, समाप्त होता है। कोई "वर्तमान" टोकन नहीं है, आप एक ही टोकन को कई परिचालनों में –
@ पानागियोटिस कानावोस ओके में पास कर सकते हैं, लेकिन क्या आप इसे करने के लिए स्थानीय चर का उपयोग कर रहे हैं? अगर मैं स्थानीय का उपयोग कर रहा हूं तो मुझे बहुत बाधा आती है कि मैं इसे केवल कॉल कर सकता हूं वर्तमान विधि के अंदर, और यदि मैं इसे वैश्विक चर के रूप में उपयोग करता हूं तो चीजें गन्दा हो सकती हैं? क्या मेरे पास प्रत्येक के लिए एक वैश्विक होना चाहिए? मुझे आशा है कि हम एक ही ट्रैक पर हैं। – Hristo
क्या मैं आपको सही समझता हूं कि धागे के बीच निर्भरताएं हैं? तो निश्चित रूप से आपको उनके लिए एक ही टोकन का उपयोग करना होगा - और एक शब्दकोश का उपयोग करने से कोई मतलब नहीं है ... –