আমি সি # 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
এটি ব্যবহার করছে, তবে ডকুমেন্টেশনে কাস্টম অপারেশন তৈরি করা বা বিদ্যমান কার্টাইনগুলি মোড়ানো ইত্যাদি সম্পর্কে পুরোপুরি কিছুই নেই etc.
সুতরাং, কাস্টম কর্টিনগুলির জন্য একটি সাধারণ, জেনেরিক এবং পুনরায় পরিবর্তনযোগ্য "প্রতীক্ষা" তৈরির উপায় আছে কি?