Cấu trúc bị hủy là lạ. Tôi đã cố gắng loại bỏ nhu cầu sử dụng mẫu dùng một lần bằng cách sử dụng quản lý tham chiếu 'thông minh', đảm bảo rằng bộ thu gom rác có thể thu thập các đối tượng vào đúng thời điểm. Trong một trong những kẻ hủy diệt của tôi, tôi đã phải đợi một sự kiện từ một vật thể khác, điều mà tôi nhận thấy nó không xảy ra. Ứng dụng này chỉ đơn giản là tắt và destructor đã được chấm dứt ở giữa thực hiện. Tôi mong đợi một destructor luôn được phép kết thúc chạy, nhưng như kiểm tra sau đây chỉ ra rằng đó là không đúng sự thật.Không destructors đảm bảo để kết thúc chạy?
using System;
using System.Diagnostics;
using System.Threading;
namespace DestructorTest
{
class Program
{
static void Main(string[] args)
{
new DestructorTest();
new LoopDestructorTest();
using (new DisposableTest()) { }
}
}
class DestructorTest
{
~DestructorTest()
{
// This isn't allowed to finish.
Thread.Sleep(10000);
}
}
class LoopDestructorTest
{
~LoopDestructorTest()
{
int cur = 0;
for (int i = 0; i < int.MaxValue; ++i)
{
cur = i;
}
// This isn't allowed to finish.
Debug.WriteLine(cur);
}
}
class DisposableTest : IDisposable
{
public void Dispose()
{
// This of course, is allowed to finish.
Thread.Sleep(10000);
}
}
}
Vì vậy, không phải là trình phá hủy được đảm bảo để kết thúc chạy?
Đang chờ sự kiện từ một đối tượng khác trong trình kết thúc? Đây là điên rồ! – MattDavey
Bạn thực sự nên gắn bó với mẫu 'IDisposable' để có sự hủy diệt đáng tin cậy và giải phóng tài nguyên. –
@MattDavey ... và chờ một sự kiện từ một đối tượng khác tiếp tục kích hoạt 'Dispose()' không phải là điên rồ? Có gì khác biệt? –