Vì vậy, tôi đã hạnh phúc đọc this từ Eric Lippert và sau đó, tất nhiên, các ý kiến tuyệt vời và trong họ John Payson nói:Tại sao không có bế tắc trong trường hợp này?
một ví dụ thú vị hơn có thể đã sử dụng hai lớp tĩnh, vì như vậy một chương trình có thể bế tắc mà không có bất kỳ câu lệnh chặn hiển thị nào.
và tôi nghĩ, yeah, mà muốn được dễ dàng vì vậy tôi gõ lên này:
public static class A
{
static A()
{
Console.WriteLine("A.ctor");
B.Initialize();
Console.WriteLine("A.ctor.end");
}
public static void Initialize()
{
Console.WriteLine("A.Initialize");
}
}
public static class B
{
static B()
{
Console.WriteLine("B.ctor");
A.Initialize();
Console.WriteLine("B.ctor.end");
}
public static void Initialize()
{
Console.WriteLine("B.Initialize");
}
public static void Go()
{
Console.WriteLine("Go");
}
}
Kết quả trong số đó (sau khi gọi B.Go()
) là:
B.ctor
A.ctor
B.Initialize
A.ctor.end
A.Initialize
B.ctor.end
Go
Không bế tắc và tôi rõ ràng là kẻ thua cuộc - vì vậy để duy trì sự xấu hổ, đây là câu hỏi của tôi: tại sao không bế tắc ở đây?
Dường như với não nhỏ bé của tôi rằng B.Initialize
được gọi trước constructor tĩnh của B
đã kết thúc và tôi nghĩ rằng điều đó không được phép.
Có thể sẽ thú vị khi xem stacktraces tại mỗi điểm. – leppie
Làm thế nào để bạn đề xuất bế tắc một chuỗi? Tất cả mọi thứ đang xảy ra đồng bộ ... –