簡體   English   中英

C# 定時器中的線程

[英]Thread in C# Timer

我有一個 windows 服務,它使用 System.Timers.Timer 每 X 分鍾執行一次長時間操作。 我需要知道是否有辦法在下一個循環中確定上一個執行是否仍在運行。
有沒有辦法知道前一個線程使用了多少 CPU memory?

一個簡單的解決方案是使用在方法開始時設置的共享、易失性布爾值,並在結束時重置。 或者使用共享計數器的Interlocked.Increment /decrement 來保持方法中線程數的運行總數。

如果您不希望調用與另一個重疊,一種解決方案是使用 Threading.Timer,設置所需的到期時間和無限期。 在每個事件結束時,您調用.Change以重置到期時間。 另一種基本上做同樣事情的方法是循環Task.Delay:

while(!cancellationToke.IsCancellationRequested){
    // do work
   await Task.Delay(periodTime);
}

您關於 CPU/內存的問題沒有多大意義。 線程要么正在運行,要么正在等待運行,要么被阻塞。 唯一可以直接歸因於線程的 memory 將是該線程的堆棧,通常很小,如果我沒記錯的話,默認情況下有 1Mb 的限制。 如果您想測量一個線程在運行 state 中的時間,您需要進行定期采樣或檢測調度程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM