2009-06-17 13 views
5

मान मैं सिंक्रोनस संस्करण के साथ शुरू के साथ WCF वस्तु निपटान के लिए:जब async पैटर्न

using(var svc = new ServiceObject()) { 
    var result = svc.DoSomething(); 
    // do stuff with result 
} 

मैं साथ

var svc = new ServiceObject(); 
svc.BeginDoSomething(async => { 
    var result = svc.EndDoSomething(async); 
    svc.Dispose(); 
    // do stuff with result 
},null); 

1 हवा) इस निपटान कॉल करने के लिए सही जगह है() ?

2) क्या() का उपयोग करने का उपयोग करने का कोई तरीका है?

उत्तर

5

रोटेम ब्लूम के ब्लॉग से: http://caught-in-a-web.blogspot.com/2008/05/best-practices-how-to-dispose-wcf.html

उत्तम आचरण: कैसे WCF ग्राहकों निपटान करने के लिए कथन का उपयोग (विजुअल बेसिक में उपयोग करना) की

उपयोग निपटान WCF ग्राहकों के लिए अनुशंसित नहीं है। ऐसा इसलिए है क्योंकि उपयोग कथन का अंत उन अपवादों का कारण बन सकता है जो अन्य अपवादों को मुखौटा कर सकते हैं जिन्हें आपको जानने की आवश्यकता हो सकती है।


using (CalculatorClient client = new CalculatorClient()) 
{ 
... 
} // this line might throw 

Console.WriteLine("Hope this code wasn't important, because it might not happen."); 

The correct way to do it is: 
try 
{ 
    client.Close(); 
} 
catch (CommunicationException) 
{ 
    client.Abort(); 
} 
catch (TimeoutException) 
{ 
    client.Abort(); 
} 
catch 
{ 
    client.Abort(); 
    throw; 
} 
+0

@Johann Blais, तो आप उत्तर की समीक्षा धन्यवाद। –

0

चूंकि आपकी सेवा किसी भी अप्रबंधित संसाधनों तक नहीं पहुंच पाएगी, इसलिए इसे दायरे से बाहर क्यों न होने दें और जीसी को अपनी बात क्यों न करें?