2010-04-06 28 views
5

Tôi có dịch vụ C# windows cần thực hiện truy vấn cơ sở dữ liệu cứ sau 60 giây (hoặc bất kỳ khoảng thời gian nào được đặt trong tệp cấu hình). Tôi đang sử dụng Thread.sleep (60) trong một vòng lặp while để thực hiện điều này. Có cách nào tốt hơn để làm điều này?Dịch vụ Windows cần đợi, Thread.Sleep?

Cảm ơn

+0

Bạn có quan tâm đến chuỗi truy vấn chạy không? – Gabe

+0

không. Tôi chỉ muốn chắc chắn rằng tôi sẽ không chạy vào bất kỳ vấn đề ... trông giống như Timer sẽ làm việc tốt hơn rất nhiều. Không có vòng lặp, mà là tốt đẹp. –

Trả lời

8

Bạn có thể sử dụng một System.Threading.Timer để chạy mã của bạn mỗi 60 giây thay vì làm nó trong một thread ngủ.

+1

Tất nhiên, điều đó có nghĩa là nếu mã của bạn chạy lâu hơn 60 giây, bạn sẽ nhận được các vấn đề đa luồng, chẳng hạn như truy cập logfile. Tôi sẽ không khuyên bạn nên làm điều đó. –

4

Sử dụng Timer để kích hoạt quy trình sau mỗi 60 giây thay vì buộc quá trình ngủ.

5

Tùy thuộc vào những gì bạn muốn làm. Nếu bạn muốn có một (nhiều) phương pháp chính xác bạn có thể muốn sử dụng System.Threading.Timer. Một điều về thread.sleep là nó thực sự là "sleepatleastuntil ...". Bộ xử lý sẽ bỏ qua chủ đề của bạn cho đến khi hết thời gian ngủ. Lần sau nó sẽ ưu tiên luồng của bạn, sau khi thời gian ngủ đã qua, nó sẽ như thế.

Điều này thường sẽ rất gần với khoảng thời gian mong muốn, nhưng có thể lâu hơn. Đừng có năng suất trừ khi bạn thực sự có ý định sinh lời.

Các vấn đề liên quan