मैं पूरे दिन कई बार बार-बार सफाई कार्य करने के लिए "हार्टबीट" प्रक्रिया को लागू करने की सोच रहा हूं।सी # में लिखी गई हार्टबीट प्रक्रिया को आप कैसे बदलेंगे?
यह कमान पैटर्न का उपयोग करने के लिए एक अच्छा मौका तरह लग रहा था, तो मैं एक अंतरफलक है कि लगता है कि है:
public interface ICommand
{
void Execute();
bool IsReady();
}
मैं तो कई कार्यों मैं चलाने के लिए चाहते हैं कि बना लिया है। यहाँ एक बुनियादी उदाहरण है:
class Program
{
static void Main(string[] args)
{
bool running = true;
Queue<ICommand> taskList = new Queue<ICommand>();
taskList.Enqueue(new ProcessFilesCommand(60)); // 1 minute interval
taskList.Enqueue(new DeleteOrphanedFilesCommand(300)); // 5 minute interval
while (running)
{
ICommand currentTask = taskList.Dequeue();
if (currentTask.IsReady())
{
ThreadPool.QueueUserWorkItem(t => currentTask.Execute());
}
taskList.Enqueue(currentTask);
Thread.Sleep(100);
}
}
}
मैं बहु सूत्रण का अधिक अनुभव नहीं है:
public class ProcessFilesCommand : ICommand
{
private int secondsDelay;
private DateTime? lastRunTime;
public ProcessFilesCommand(int secondsDelay)
{
this.secondsDelay = secondsDelay;
}
public void Execute()
{
Console.WriteLine("Processing Pending Files...");
Thread.Sleep(5000); // Simulate long running task
lastRunTime = DateTime.Now;
}
public bool IsReady()
{
if (lastRunTime == null) return true;
TimeSpan timeSinceLastRun = DateTime.Now.Subtract(lastRunTime.Value);
return (timeSinceLastRun.TotalSeconds > secondsDelay);
}
}
अंत में, मेरे कंसोल आवेदन ThreadPool में जोड़ने के लिए कार्य इंतजार कर की तलाश में इस पाश में चलता है कुछ काम से परे मैंने ऑपरेटिंग सिस्टम क्लास में किया था। हालांकि, जहां तक मैं कह सकता हूं कि मेरे किसी भी धागे किसी भी साझा राज्य तक पहुंच नहीं रहे हैं, इसलिए उन्हें ठीक होना चाहिए।
क्या यह ऐसा करने के लिए "ठीक" डिज़ाइन जैसा प्रतीत होता है? क्या आप कुछ बदलेंगे?
# 1: मैं यह जोड़ना चाहता हूं कि आप सचमुच थ्रेड पूल थ्रेड से बाहर हो सकते हैं, जिससे आपका एप्लिकेशन मृत लॉक हो जाता है। यही कारण है कि आप अपने थ्रेडपूल में लंबे समय तक चलने वाले धागे की अनुमति नहीं देते हैं। थ्रेड पूल के लिए छोटे चलने वाले कार्यों के बारे में बिंदु के लिए –
+1। –
@ जोनाथन एलन, अच्छा बिंदु, मैंने इसके जवाब में इसके बारे में एक नोट जोड़ा। –