2011-04-01 13 views
7

मैं एक सी # अनुप्रयोग पर काम कर रहा हूं जो SQL सर्वर से संग्रहित प्रक्रियाओं को कॉल करता है। उपयोगकर्ता द्वारा इनपुट पैरामीटर के आधार पर, संग्रहित प्रक्रिया में कुछ समय लग सकता है और कई रिकॉर्ड लौटा सकते हैं।लिंक - संग्रहित प्रक्रिया के निष्पादन को बाधित करें

मैं एक रद्द बटन को कार्यान्वित करना चाहता हूं ताकि उपयोगकर्ता लंबे समय तक संग्रहीत प्रक्रिया के निष्पादन को रद्द कर सके। मैं संग्रहित प्रक्रिया में नए थ्रेड में कॉल चलाता हूं ताकि संग्रहित प्रक्रिया में कुछ समय लगे जब GUI प्रभावित नहीं होता है। मैंने धागे को निरस्त करने के बारे में पढ़ा लेकिन निरस्त करने के बारे में कई अस्वीकार राय मिली।

संभावित समाधान मैं के बारे में सोच:

  • वहाँ एक आम तरीके से संग्रहीत प्रक्रिया
  • वहाँ एक बेहतर धागा बंद करने के लिए रास्ता नहीं है (जो सी # कोड में एक विधि है) को क्रियान्वित करने को रोकने के लिए है? (मैं भी Thread.Interrupt (पाया) लेकिन यह केवल एक अवरुद्ध धागे पर काम करता है, कोड चलाने पर नहीं)
  • मैं धागा त्याग और एक नया शुरू लेकिन तब अनावश्यक डेटाबेस और नेटवर्क संसाधनों का उपयोग किया जाता कर सकते हैं
  • वहाँ है सर्वर की तरफ से संग्रहीत प्रक्रिया को रोकने का एक तरीका?
+0

अंधेरे में गोली मार दी, लेकिन DataContext पर कनेक्शन डिस्कनेक्ट करने देता है, या एक TransactionScope में कॉल लपेटकर और बुला "रोलबैक" इसे रोको? – Ocelot20

उत्तर

0

आप प्रक्रिया सर्वर पक्ष को त्यागने का प्रयास कर सकते हैं लेकिन इसके लिए उच्च निजीकरण (सर्वर व्यवस्थापक) की आवश्यकता है, इसलिए यह अधिकांश सहकर्मियों के तहत feasbile नहीं है।

थ्रेड गर्भपात काम कर सकता है (अनुशंसित नहीं), लेकिन मुझे यकीन नहीं है कि डीबी प्रसंस्करण बंद कर देगा।

अंत में मुझे यकीन नहीं है कि यह कुशलतापूर्वक करने का कोई तरीका है।

0

आप थ्रेड को रोक सकते हैं लेकिन क्वेरी अभी भी चल जाएगी क्योंकि यह SQL सर्वर द्वारा होस्ट किया गया है।

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