Tôi đang có một chuỗi nền nhỏ chạy suốt đời ứng dụng - tuy nhiên khi ứng dụng bị tắt, luồng sẽ thoát ra một cách duyên dáng.Thread.Interrupt để ngừng ngủ dài khi tắt ứng dụng - Có cách tiếp cận tốt hơn
Vấn đề là chuỗi chạy một số mã trong khoảng thời gian 15 phút - có nghĩa là nó ngủ ALOT.
Bây giờ để thoát khỏi giấc ngủ, tôi quăng một gián đoạn vào nó - câu hỏi của tôi là tuy nhiên, nếu có cách tiếp cận tốt hơn cho điều này, vì các ngắt tạo ra ThreadInterruptedException.
Dưới đây là các ý chính của mã của tôi (hơi giả):
public class BackgroundUpdater : IDisposable
{
private Thread myThread;
private const int intervalTime = 900000; // 15 minutes
public void Dispose()
{
myThread.Interrupt();
}
public void Start()
{
myThread = new Thread(ThreadedWork);
myThread.IsBackground = true; // To ensure against app waiting for thread to exit
myThread.Priority = ThreadPriority.BelowNormal;
myThread.Start();
}
private void ThreadedWork()
{
try
{
while (true)
{
Thread.Sleep(900000); // 15 minutes
DoWork();
}
}
catch (ThreadInterruptedException)
{
}
}
}
Bạn quá nhanh. Tôi bỏ cuộc;) – frast
Giải pháp tuyệt vời, cảm ơn rất nhiều :-) – Steffen
Không phải là vấn đề ở đây là chuỗi làm việc đang đợi trong khi giữ khóa, để khóa trong phương pháp stop() sẽ chặn trong tối đa 15 phút cho đến khi làm việc thread phát hành khóa? –