मैं C # 5 के await
कीवर्ड के अनुरूप यूनिटी 5 में समाप्त होने के लिए कोरआउट और अतुल्यकालिक संचालन की प्रतीक्षा करने के लिए एक सामान्य / पुन: प्रयोज्य तरीके की तलाश कर रहा हूं ।
सबसे आसान तरीका जो मैं सोच सकता हूं वह कुछ इस तरह है:
public class SomeUtility {
public bool IsDoingSomething { get; private set; }
public IEnumerator DoSomethingAsync() {
IsDoingSomething = true;
yield return new WaitForSeconds(2);
IsDoingSomething = false;
}
}
और फिर एक और कोरआउट में:
while(!someUtilityInstance.IsDoingSomething)
yield return null;
हालांकि यह बहुत अच्छा नहीं है क्योंकि यह while
बयानों के साथ कोड को बंद कर देता है, पुन: प्रयोज्य नहीं है (उदाहरणों और सरल उपयोगिता कार्यों के लिए भी समर्पित वर्गों की जरूरत है!) और बहुत सारे सिंगलटन या स्थिर सामान जहां इसकी आवश्यकता भी नहीं है।
निकटतम मैंने पाया एकता का उपयोग कर रहा है AsyncOperation
। यह यहाँ बहुत अच्छी तरह से काम करता है:
public static IEnumerator Await(this AsyncOperation operation) {
while(!operation.isDone)
yield return operation;
}
yield return SceneManager.LoadLevelAsync("blaaaah").Await();
हालाँकि .. समस्या यह है: कैसे बनाएँ AsyncOperation
? उदाहरण के लिए कुछ सेवाएं, इसका SceneManager
उपयोग कर रही हैं, लेकिन दस्तावेज में कस्टम ऑपरेशन बनाने या मौजूदा कोरआउट्स को लपेटने आदि के बारे में पूरी तरह से कमी है।
तो, क्या कस्टम कोराउटाइन के लिए एक सरल, सामान्य और resuable "प्रतीक्षा" बनाने का एक तरीका है?