Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Finalizer进行清理-Xunit_C#_.net_Destructor_Xunit - Fatal编程技术网

C# 使用Finalizer进行清理-Xunit

C# 使用Finalizer进行清理-Xunit,c#,.net,destructor,xunit,C#,.net,Destructor,Xunit,我一直在使用Finalizer在XUnit中执行清理操作 public class CSATWebClientTests { private readonly CSATWebServer server; private readonly CSATClient client; private static readonly Random Rng = new Rand

我一直在使用Finalizer在XUnit中执行清理操作

    public class CSATWebClientTests
    {
        private readonly        CSATWebServer server;
        private readonly        CSATClient    client;
        private static readonly Random        Rng            = new Random((int)DateTime.Now.Ticks);
        private readonly        string        instancePrefix = $"http://localhost:{Rng.Next(20000, 30000)}/";

        public CSATWebClientTests()
        {
            server = new CSATWebServer(new[] {instancePrefix});
            client = new CSATClient(instancePrefix);
            server.Start();
        }

        ~CSATWebClientTests()
        {
            server.Stop();
        }
}
这似乎是可行的,但我快速浏览了文档,它说我应该改为实现
IDispose


是否有任何理由认为这会更好?

请注意析构函数和终结器之间存在差异。在代码中有一个终结器。请更新问题,其他人会更容易提供帮助。在最好的情况下,使用终结器充满了问题,通常表示出现了问题。终结器可能永远不会被调用,因为存在线程安全问题。但是,总而言之,如果文档说使用
IDisposable
界面,我会按照documentation@MichaelRandall但我更想知道“为什么”。即使是在垃圾收集器收集实例时调用终结器<代码>程序员无法控制何时调用终结器;垃圾收集器决定何时调用它。这意味着它可能永远不会被调用。系统将调用终结器,其中测试运行程序将调用
Dispose
方法,我认为您更喜欢的方法是什么。