आम तौर पर लूप होता है, काम आप पूरा करना चाहते हैं दोहराया है, हो सकता है एक पाश में या शायद एक ट्रिगर या शायद कुछ और।Topshelf - हैंडलिंग सेवाओं के साथ
मैं Topshelf उपयोग कर रहा हूँ मेरे लिए एक दोहराया कार्य को पूरा करने, विशेष रूप से मैं Shelf'ing कार्यक्षमता का उपयोग कर रहा।
समस्या मैं आ रही हैं कि कैसे काम के पाशन को संभालने के लिए है।
जब बूट Topshelf में सेवा चाबुक की मार, आप इसे एक वर्ग (इस मामले ScheduleQueueService
में) गुजरती हैं और संकेत मिलता है अपने Start
विधि है जो और यह Stop
विधि है:
उदाहरण:
public class QueueBootstrapper : Bootstrapper<ScheduledQueueService>
{
public void InitializeHostedService(IServiceConfigurator<ScheduledQueueService> cfg)
{
cfg.HowToBuildService(n => new ScheduledQueueService());
cfg.SetServiceName("ScheduledQueueHandler");
cfg.WhenStarted(s => s.StartService());
cfg.WhenStopped(s => s.StopService());
}
}
लेकिन में मेरी StartService()
विधि मैं काम मैं चल रहा हूँ दोहराने के लिए थोड़ी देर के पाश का उपयोग कर रहा है, लेकिन जब मैं सेवा बंद करने के लिए Windows के माध्यम से सेवाओं इसे रोकने के लिए विफल रहता है प्रयास करते हैं और मुझे लगता है इसकी वजह से StartService()
विधि कभी नहीं समाप्त हो गया जब यह मूल रूप से बुलाया गया था।
उदाहरण:
public class ScheduledQueueService
{
bool QueueRunning;
public ScheduledQueueService()
{
QueueRunning = false;
}
public void StartService()
{
QueueRunning = true;
while(QueueRunning){
//do some work
}
}
public void StopService()
{
QueueRunning = false;
}
}
क्या ऐसा करने का एक बेहतर तरीका है?
मैं में काम चलाने के लिए नेट
System.Threading.Tasks
का उपयोग कर पर विचार किया है और उसके बाद हो सकता है() StopService पर धागा बंद करनेशायद Quartz का उपयोग कर कार्य को दोहराने के लिए और फिर इसे हटा दें।
विचार?
इन सभी वर्षों के बाद, क्या किसी को पता है कि क्या यह वास्तव में भी Topshelf के साथ मामला है? Topshelf दस्तावेज़ीकरण में इसका कोई संकेत नहीं है और मैं यह तय करने के लिए संघर्ष कर रहा हूं कि मुझे व्यवस्थित रूप से एक नया धागा या मेरी सेवा में जब स्टार्ट() पर समान कुछ होना चाहिए। – guillaume31