ObjectDisposedException

ObjectDisposedException

我遇到了一个问题,其中ObjectDisposedException大约有50%的时间被抛出。以下try(在finally内)内的代码导致了此异常。我不确定如何处理。我可以只吃异常,如下所示,但是有没有一种方法可以检查并关闭对象而不会发生异常?

    public static FindResponse Discover(FindCriteria findCriteria,
                                        DiscoveryEndpoint discoveryEndpoint = null)
    {
        DiscoveryClient discoveryClient = null;

        try
        {
            if (discoveryEndpoint == null) {
                 discoveryEndpoint = new UdpDiscoveryEndpoint();
            }

            discoveryClient = new DiscoveryClient(discoveryEndpoint);

            return discoveryClient.Find(findCriteria);
        }
        finally
        {
            try
            {
                if (discoveryClient != null)
                {
                    discoveryClient.Close();
                }
            }
            catch (ObjectDisposedException)
            {
                // Eat it.
            }
        }
    }

最佳答案

怎么样

public static FindResponse Discover(FindCriteria findCriteria, DiscoveryEndpoint discoveryEndpoint = null)
{
    if (discoveryEndpoint == null)
      discoveryEndpoint = new UdpDiscoveryEndpoint();

    using (var client = new DiscoveryClient(discoveryEndpoint))
    {
        return client.Find(findCriteria);
    }
}


更新资料

似乎DiscoveryClient.Dispose()将引发异常。 OP的原始方法似乎是唯一可以接受的答案。

关于c# - 正确避免ObjectDisposedException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28337760/

10-11 04:08