C# 使用Finalizer进行清理-Xunit
我一直在使用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
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
方法,我认为您更喜欢的方法是什么。