हाल ही में मैंने एक एपीआई का उपयोग करके थोड़ा सा काम किया है। एपीआई वेब से प्राप्त करने के काम को सरल बनाने के लिए यूनिरेस्ट http लाइब्रेरी का उपयोग करता है। स्वाभाविक रूप से, चूंकि एपीआई सर्वर से डेटा कहा जाता है, इसलिए मैंने एपीआई को एसिंक्रोनस कॉल का उपयोग करके कुशल होने की कोशिश की। मेरा विचार इस प्रकार संरचित है:एकाधिक वायदा के लिए कॉलबैक की प्रतीक्षा
- वायदा
- प्रदर्शन डेटा + अतिरिक्त जानकारी डेटा
इसलिए से इकट्ठा के परिणाम वापस लौट कर डेटा की सरणी बनाएँ, मैं सभी डेटा की आवश्यकता है दूसरा कदम शुरू करने से पहले वापस लौटा।
Future < HttpResponse <JsonNode> > future1 = Unirest.get("https://example.com/api").asJsonAsync(new Callback <JsonNode>() {
public void failed(UnirestException e) {
System.out.println("The request has failed");
}
public void completed(HttpResponse <JsonNode> response) {
System.out.println(response.getBody().toString());
responses.put(response);
}
public void cancelled() {
System.out.println("The request has been cancelled");
}
});
Future < HttpResponse <JsonNode> > future2 = Unirest.get("https://example.com/api").asJsonAsync(new Callback <JsonNode>() {
public void failed(UnirestException e) {
System.out.println("The request has failed");
}
public void completed(HttpResponse <JsonNode> response) {
System.out.println(response.getBody().toString());
responses.put(response);
}
public void cancelled() {
System.out.println("The request has been cancelled");
}
});
doStuff(responses);
मैं इसे कैसे बनाना होगा ताकि doStuff कहा जाता है के बाद ही वायदा के दोनों समाप्त कर लें: मेरे कोड इस प्रकार है?
'एक्जिक्यूटर कॉम्प्लिशन सेवा' पर नज़र डालना चाहता है, लेकिन यदि कोई प्रतिक्रिया समाप्त हो जाती है तो इससे आपको सामान करने की अनुमति मिलती है। – Gray
http://stackoverflow.com/questions/3269445/executorservice-how-to-wait-for-all-tasks-to-finish – goat