में टीपीएल का उपयोग करके निरंतर प्रसंस्करण "फ्लो" कैसे बना सकता हूं, मुझे यकीन नहीं है कि निम्नलिखित संभव है, लेकिन मैं पैरालेल में कई कार्रवाइयों को एक थ्रॉटल तरीके से आमंत्रित करना चाहता हूं, लेकिन टाइमर या लूप/नींद चक्रों का उपयोग करने के लिए वापस लौटने के बिना निरंतर प्रसंस्करण का प्रवाह रखें।मैं सी # 4
अब तक मुझे यह काम मिल गया है कि यह कुछ स्रोतों से इनपुट का एक बड़ा बैच लोड करता है ... और फिर उन्हें नियंत्रित तरीके से पैरालेल में & लूपों को नीचे की तरह प्रक्रिया करता है।
static void Main(string[] args)
{
while(true) //Simulate a Timer Elapsing...
{
IEnumerable<int> inputs = new List<int>() {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//Simulate querying database queue tables for next batch of entries
RunAllActions(inputs, 3); //Max 3 at a time.
}
}
static void RunAllActions(IEnumerable<int> inputs, int maxConcurrency)
{
var options = new ParallelOptions() {MaxDegreeOfParallelism = maxConcurrency};
Parallel.ForEach<int>(inputs, options, DoWork);
//Blocks here until all inputs are processed.
Console.WriteLine("Batch of Work Done!!!");
}
static void DoWork(int input)
{
Console.WriteLine("Starting Task {0}", input);
System.Threading.Thread.Sleep(3000);
Console.WriteLine("Finishing Task {0}", input);
}
मैं जानना चाहता है जो खोजना चाहते हैं, वहाँ है कि मैं यह हमेशा चालू रखने के लिए ... तो यह है कि मैं "टाइमर elapsing" & "डेटाबेस मतदान" की जगह ले सकता इस्तेमाल कर सकते हैं TPL में एक निर्माण है एक संदेश क्यूई प्राप्त घटना के साथ।
निम्नलिखित का एक मोटा संस्करण है जिसे मैं हासिल करना चाहता हूं ... अन्यथा मैं इसके बारे में जा सकता हूं, लेकिन मैं जानना चाहता हूं कि इस प्रकार का पैटर्न टीपीएल में बनाया गया है।
internal class Engine
{
private MessageQueue mq;
private Queue<int> myInternalApplicationQueue;
public Engine()
{
//Message Queue to get new task inputs from
mq = new MessageQueue();
mq.ReceiveCompleted += new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
// internal Queue to put them in.
myInternalApplicationQueue = new Queue<int>();
}
void mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
//On MQ Receive, pop the input in a queue in my app
int input = (int) e.Message.Body;
myInternalApplicationQueue.Enqueue(input);
}
public void StartWorking()
{
//Once this gets called, it doesn't stop... it just keeps processing/watching that queue
//processing the tasks as fast as it's allowed while the app is running.
var options = new ParallelOptions() { MaxDegreeOfParallelism = 3 };
Parallel.KeepWorkingOnQueue<int>(myInternalApplicationQueue, options, DoWork);
// ^^^^^^^^^^^^^^^^^^ <----- THIS GUY
}
}
धन्यवाद रीड। यह कोशिश करेगा। –