2012-09-07 15 views
7

यहां परिदृश्य है: उपयोगकर्ता लॉगिन पर मैं एक कार्य शुरू करता हूं जो मेल अधिसूचनाओं के लिए IMAP निष्क्रिय है और सिग्नलर (पुश अधिसूचना के प्रकार) के माध्यम से क्लाइंट के साथ लाइव कनेक्शन है। अब समस्या यह है कि मैं इस कार्य को कैसे रद्द करूं? यानी उपयोगकर्ता पुश अधिसूचना रद्द या लॉग आउट ..वेब अनुरोध के माध्यम से async कार्य को कैसे रद्द करें?

संपादित करें: उदाहरण के लिए मेरी समझ के अनुसार यदि साइट पर 5 उपयोगकर्ता लॉग ऑन हैं तो 5 कार्य चल रहे हैं? तो मैं व्यक्तिगत कार्यों को कैसे रद्द कर सकता हूं।

+0

क्या आप स्पष्ट कर सकते हैं कि 'कार्य' प्रक्रिया वेब सेवा या विंडोज सेवा में निष्पादित हो रही है या नहीं? –

+1

हाय @ हर्षबैड कार्य एक एमवीसी ऐप के भीतर चल रहा है। – Iternity

उत्तर

1

अतुल्यकालिक कार्यकर्ता रद्द समर्थन करने के लिए संशोधित किया जाना चाहिए

http://www.csharp-examples.net/cancel-asynchronous-method/

आप पृष्ठभूमि कार्यकर्ता जो थोड़ा कम जटिल है इस्तेमाल कर सकते हैं http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.cancelasync.aspx

एक समस्या मैं सामना करना पड़ा है जब आप भेजने के एक बाहरी स्रोत (डीबी, एप) को रद्द करें जो पहले से ही नौकरी शुरू कर चुका है, अगर यह रद्द करने का समर्थन नहीं करता है, तो आपको इसे समाप्त होने तक प्रतीक्षा करनी पड़ सकती है।

संपादित करें: मैंने कभी एमवीसी के साथ ऐसा नहीं किया है, लेकिन एक एसीसीएन प्रक्रिया के लिए 'रद्दीकरण टोकन का उपयोग करना' पर एक अच्छा लेख मिला है जो एमवीसी 4 में कैंससेलेशन टोकन पैरामीटर लेता है। http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 उम्मीद है कि यह मदद करता है।

1

जब भी आप कोई कार्य बनाते हैं तो आपको रद्दीकरण टोकन बनाना होगा और उसे पास करना होगा। चूंकि प्रत्येक उपयोगकर्ता किसी कार्य से जुड़ा हुआ है, इसलिए आप उपयोगकर्ता के सत्र में कार्य और रद्दीकरण टोकन स्टोर कर सकते हैं।

अब उपयोगकर्ता के सत्र में संग्रहीत रद्दीकरण टोकन का उपयोग करके आप आसानी से कार्य को रद्द कर सकते हैं जब वह लॉग आउट या रद्द बटन दबाता है।

कार्य रद्दीकरण के लिए यह post देखें।

+0

धन्यवाद @ मार्क। मैंने टोकन को संग्रहीत करने के बारे में सोचा था, लेकिन जब मैं धारावाहिक नहीं है तो मैं इसे कैसे स्टोर करूं? – Iternity

+0

@ अनंतता क्या आप आउट-ऑफ-प्रो सत्र स्थिति का उपयोग कर रहे हैं? आपने यह नहीं कहा कि – VJAI

+0

प्रश्न में मैं इन-प्रो सत्र का उपयोग कर रहा हूं। सुनिश्चित नहीं है कि यह कैसे फर्क पड़ता है। कृपया समझाईए। – Iternity

0

प्रक्रिया उपयोगकर्ता से कोई गतिविधि नहीं कर सकती है। अन्य थ्रेड में चर का आदान-प्रदान करने का सबसे आसान तरीका - एक फ़ाइल। मान लीजिए कि क्लाइंट ब्राउज़र अभी भी खुला है, जावास्क्रिप्ट टाइमर अजाक्स अनुरोधों को कॉल करता है, जो सर्वर पर समय-समय पर मुद्रित होता है। आपका कार्य समय-समय पर फ़ाइल को भी पढ़ता है, और जब टाइमस्टैम्प बहुत पुराना होता है, तो प्रक्रिया स्वयं को मार देती है। गतिविधि टाइमआउट का मूल्य आप अपनी पसंद का सेट कर सकते हैं।