Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
1
Question by andycodes · May 15, 2017 at 12:17 AM · coroutineexecution order

Does a coroutine invoked using StartCorutine() need to finish before code below executes in a function?

I'm not sure how exactly coroutines execute when called in a method, but I'm hoping someone can clear up my understanding here. Using some pseudo code:

 void test(){
 print("1");
 StartCoroutine(PrintTwo());
 print("3");
 }
 
 IEnumerator PrintTwo(){
 yield return new waitForSeconds(5);
 print("2");    
 }

will this code print "1 2 3" or "1 3 2"? To get more at what I'm asking is, does the function wait for the Coroutine to finish before continuing execution, or does it run both at the same time where the outcome would be the latter?

EDIT: After quickly testing it, the outcome was "1 3 2". That being said, is there a way I can require the function to wait until printTwo() has finished before continuing execution? or would this require test to be an IEnumerator itself?

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image EdwinChua · May 15, 2017 at 01:03 AM 1
Share

"A coroutine is like a function that has the ability to pause execution and return control to Unity but then to continue where it left off on the following frame." - https://docs.unity3d.com/$$anonymous$$anual/Coroutines.html

You could do a separate coroutine, depending on what it is you're trying to achieve, or simply call the print statement after print("2")

 void test(){
  print("1");
  StartCoroutine(PrintTwo());
  }
  
  IEnumerator PrintTwo(){
  yield return new waitForSeconds(5);
  print("2");    
 print("3"); // move this here
  }
avatar image andycodes EdwinChua · May 15, 2017 at 01:10 AM 0
Share

Thanks that helps!

1 Reply

· Add your reply
  • Sort: 
avatar image
2
Best Answer

Answer by bobisgod234 · May 15, 2017 at 02:27 AM

is there a way I can require the function to wait until printTwo() has finished before continuing execution? or would this require test to be an IEnumerator itself?

You can yield the result of StartCoroutine, and Unity will not continue past until that coroutine is finished. This will require 'test' to be an IEnumerator itself (and started as a coroutine elsewhere)

  IEnumerator test(){
  print("1");
  yield return StartCoroutine(PrintTwo());
  print("3");
  }
  
  IEnumerator PrintTwo(){
  yield return new waitForSeconds(5);
  print("2");    
  }

should output 1 2 3

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

70 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Coroutine, Start() and Update() execution order 1 Answer

Two coroutinew doesn't works together 1 Answer

Coroutines Didn't Work After Changing Scene 1 Answer

Unity timer script error with coroutine 2 Answers

Is changing 60 FPS into 30 FPS affects time in coroutines? 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges