मैं कार्य का उपयोग करने की कोशिश कर रहा हूं। कई कार्यों के पूरा होने का इंतजार करने के लिए सभी।कार्य का उपयोग कैसे करें। जब सभी() सही ढंग से
मेरा कोड नीचे है - यह एकाधिक एसिंक कार्यों को लॉन्च करना है, जिनमें से प्रत्येक बस मार्ग को पुनर्प्राप्त करता है और फिर उन्हें स्थानीय सरणी में जोड़ता है। हालांकि, कार्य। जब सभी (...) तुरंत लौटते हैं, और स्थानीय मार्ग सरणी की गिनती शून्य होती है। यह अजीब लगता है, क्योंकि मैं प्रत्येक कार्य के भीतर विभिन्न 'प्रतीक्षा' बयानों की अपेक्षा करता हूं कि प्रवाह निलंबित हो गया है, और कार्य समाप्त होने तक वापस नहीं आता है।
List<Task> monitoredTasks = new List<Task>();
foreach (BusRouteIdentifier bri in stop.services)
{
BusRouteRequest req = new BusRouteRequest(bri.id);
// Start a new task to fetch the route for each stop
Task getRouteTask = Task.Factory.StartNew(async() =>
{
var route = await BusDataProviderManager.DataProvider.DataBroker.getRoute(req);
// Add the route to our array (on UI thread as it's observed)
await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate
{
this.routes.Add(route);
});
});
// Store the task in our monitoring list
monitoredTasks .Add(getRouteTask);
}
Debug.WriteLine("Awaiting WHENALL");
await Task.WhenAll(monitoredTasks);
Debug.WriteLine(string.Format("WHENALL returned (routes count is {0} ", this.routes.Count));
this.OnWillEndFetchingRoutes(new EventArgs());
मैं स्पष्ट रूप से कुछ गलत कर रहा हूं - लेकिन क्या?
आप चाहे अंतिम 'Task' गलती की स्थिति में नहीं है की जाँच की कोशिश की है के लिए धन्यवाद:
प्राप्त करने के लिए मैं चाहता था, मैं इस प्रकार refactor करने की जरूरत? –
मुझे लगता है कि यह फ़ोरैच लूप के अंदर कुछ गलत 'प्रेषक का इंतजार' हो सकता है। यूआई थ्रेड तुरंत मनाया जाएगा और प्रदर्शित होगा? –
@ie। हां, इसका राज्य RanToCompletion है। सरणी में सभी कार्यों की स्थिति RanToCompletion भी है, हालांकि जब मैं वास्तव में उन्हें व्यक्तिगत रूप से निरीक्षण करता हूं, तो प्रत्येक का परिणाम क्षेत्र प्रतीक्षा कर रहा है। सक्रियता –