6

मैंने कॉन्सटेलेशन टोकनसोर्स और रद्दीकरण टोकन द्वारा फ्रेमवर्क 4.0 में प्रदान किए गए सहकारी थ्रेड रद्दीकरण पैटर्न का उपयोग शुरू किया और मैंने इसे बहुत उपयोगी और सरल पाया।रद्दीकरण टोकनसोर्स और रद्दीकरण टोकन पैटर्न के समान धागे को रोकने के लिए एक पैटर्न?

मेरा उद्देश्य अब मेरे आवेदन को एक समान सुरुचिपूर्ण और सरल समाधान प्रदान करना है, लेकिन उन्हें रद्द करने के बजाय धागे को रोकने के लिए। चूंकि इस मामले में अनुरोध विराम कमांड को सुनने से अलग होगा, मैंने सोचा था कि पॉज़टोकनसोर्स और पॉज़ टोकन की तरह कुछ अच्छा होगा। तो मेरा पहला सवाल यह है कि यदि आप सहकारी रोकथाम के लिए ऐसा पैटर्न सुझाते हैं या यदि यह कुछ और बेहतर है।

यदि ऐसा पैटर्न होना अच्छा विचार है, तो क्या आपके पास यह करने के बारे में कोई सुझाव या दिशानिर्देश हैं? इस समय मैंने सोचा था कि स्रोत मैन्युअल रीसेट इवेंट द्वारा रुकने और रोक नहीं सकता है और टोकन को स्रोत का संदर्भ होना चाहिए। यह एक पहले मसौदे का पालन करता है जिस पर मुझे उम्मीद है कि आप इसे सुधारने के लिए सुझाव दे सकते हैं।

public class PauseTokenSource 
{ 
    protected ManualResetEvent mre = new ManualResetEvent(true); 
    object syncRoot = new object(); 

    public PauseToken PauseToken { get { return new PauseToken(this); } } 

    public bool IsPauseRequested { get { return !mre.WaitOne(0); } } 

    public void Pause() 
    { 
     mre.Reset(); 
    } 

    public void UnPause() 
    { 
     mre.Set(); 
    } 

    public void WaitUntillPaused() 
    { 
     mre.WaitOne(); 
    } 
} 

public class PauseToken 
{ 
    private PauseTokenSource source; 

    public PauseToken(PauseTokenSource source) 
    { 
     this.source = source; 
    } 

    public bool IsPauseRequested 
    { 
     get { return source != null && source.IsPauseRequested; } 
    } 

    public void WaitUntillPaused() 
    { 
     if (source != null) 
      source.WaitUntillPaused(); 
    } 
} 
+0

आप इस के साथ अब और किया गया है या इसे कहीं भी लागू किया है? – phillip

+0

मैं उत्सुक हूं कि आप इस "फीचर" के लिए क्या उपयोग करेंगे ... – Kit

+0

'मैन्युअल रीसेट इवेंट' वर्ग थ्रेड सुरक्षित होने के बाद से आपको 'लॉक' नहीं करना है। –

उत्तर

0

क्यों एक अंतरफलक है कि PauseTokenSource लागू कर सकते हैं, और PauseTokens के बजाय चारों ओर भेज रहे हैं नहीं। या स्रोत के अलावा टोकन उदाहरण होने का क्या फायदा है? मुझे नहीं किसी भी ...

public interface IPauseToken 
{ 
    bool IsPausedRequested { get; } 
    void WaitUntillPaused(); 
} 

और वैसे, WaitUntillPaused, यह WaitWhilePaused नहीं किया जाना चाहिए ...