2011-10-05 28 views
6

Tôi có một ứng dụng ASP.NET trong đó tôi đang viết mã này trong sự kiện Application_OnStart:an toàn Chủ đề về ứng dụng Bắt đầu

public virtual void OnStart(HttpApplication httpApplication) 
{ 
    MyClass.PopulateIndices(); 
} 

Bây giờ, tôi biết rằng App_Onstart là bắn chỉ một lần, vì vậy câu hỏi của tôi là: làm Tôi cần thêm an toàn luồng trong mã này, như:

lock(some object) 
{ 
    MyClass.PopulateIndices(); 
} 

Đây có phải là lock() thực sự cần thiết? Nhiều chủ đề có thể kích hoạt ứng dụng OnStart cùng một lúc không?

Trả lời

9

Nó sẽ được gọi là chỉ một lần. Chắc chắn rồi. Bạn không cần bất kỳ khóa ở đó.

Từ MSDN:

Phương pháp Application_Start được gọi là một lần duy nhất trong suốt vòng đời của một ứng dụng.

Nguồn: http://msdn.microsoft.com/en-us/library/ms178473.aspx

+0

gì nếu tôi đang sử dụng cùng một thư mục ứng dụng cho một vài trang web, nó vẫn được gọi là một lần? Làm thế nào tôi có thể tái tạo điều này? –

1

Tôi đã thử nghiệm điều này với một số lần ghi nhật ký và Application_Start chỉ được thực thi một lần (trong khi, ví dụ, Session_Start được thực hiện ở mỗi lần bắt đầu phiên của mỗi người dùng).

bạn sẽ không cần khóa.