मैं चीजों को कतार में रखने के लिए अपने एज़ूर कोड में थ्रेड को एन्कोपरेट करने पर काम कर रहा था। ऐसा करने के लिए मैंने संदर्भ के रूप में http://www.microsoft.com/download/en/details.aspx?id=19222 का उपयोग किया।कार्य। जारी रखें में सभी कार्य
मेरे कोड से अधिक संदेशों enqueue को इस तरह दिखता है:
public void AddMessagesAsync(IEnumerable<IQueueMessage> messages, string queue = null, TimeSpan? timeToLive = null)
{
//check if we need to switch queues
if (!String.IsNullOrEmpty(queue))
{
SetCurrent(queue);
}
//setup list of messages to enqueue
var tasks = new List<Task>();
Parallel.ForEach(messages, current => {
if (timeToLive.HasValue)
{
//create task with TPL
var task = Task.Factory.FromAsync(Current.BeginAddMessage, Current.EndAddMessage, Convert(current), timeToLive.Value, tasks);
//setup continuation to trigger eventhandler
tasks.Add(task.ContinueWith((t) => AddMessageCompleted(t)));
}
else
{
//create task with TPL
var task = Task.Factory.FromAsync(Current.BeginAddMessage, Current.EndAddMessage, Convert(current), tasks);
//setup continuation to trigger eventhandler
tasks.Add(task.ContinueWith((t) => AddMessageCompleted(t)));
}
});
//setup handler to trigger when all messages are enqueued, a we are blocking the thread over there to wait for all the threads to complete
Task.Factory.ContinueWhenAll(tasks.ToArray(), (t) => AddMessagesCompleted(t));
}
private void AddMessagesCompleted(Task[] tasks)
{
try
{
//wait for all tasks to complete
Task.WaitAll(tasks);
}
catch (AggregateException e)
{
//log the exception
var ex = e;
//return ex;
}
if (AddedMessages != null)
{
AddedMessages(tasks, EventArgs.Empty);
}
}
अब मेरे सवाल निरंतरता में Task.Wait (जो एमएस द्वारा प्रदान की दस्तावेज़ के अनुसार किया जाता है) के बारे में है। ऐसा लगता है कि धागे की प्रतीक्षा करने के लिए थोड़ा अजीब लगता है जहां आप पहले ही जानते हैं कि सही हो गया है? एकमात्र कारण मैं कल्पना कर सकता हूं कि त्रुटियों को बुलबुला करना और उनको संसाधित करना है। क्या मुझसे कोई चूक हो रही है?
मुझे लगता है कि हम तब मेरी धारणा पर सहमत हैं? –
@Didier हाँ - मेरे जवाब में उस भाग को भूल जाओ :) – Skomski