5

同期バージョンから始めるとします。

 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) これは Dispose() を呼び出す正しい場所ですか?

2) using() を使用する方法はありますか?

4

2 に答える 2

5

From Rotem Bloom's blog: http://caught-in-a-web.blogspot.com/2008/05/best-practices-how-to-dispose-wcf.html

Best Practices: How to Dispose WCF clients

Use of the using statement (Using in Visual Basic) is not recommended for Dispose WCF clients. This is because the end of the using statement can cause exceptions that can mask other exceptions you may need to know about.


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;
}
于 2009-06-18T09:13:36.120 に答える