Apa itu IEnumerator dan Coroutine Pada C# ?

Keduanya adalah tipe yang mewakili objek.

 Coroutine adalah kelas mesin Unity sementara IEnumerator adalah milik .NET.

 Ketika Anda mengulang melalui kumpulan atau mengakses file besar, menunggu seluruh tindakan akan menghentikan semua yang lain, IEnumerator memungkinkan untuk menghentikan proses pada saat tertentu, mengembalikan bagian objek (atau tidak sama sekali) dan kembali ke titik itu setiap kali Anda  membutuhkannya. Ini hingga metode MoveNext dari IEnumerator mengembalikan false yang mengindikasikan bahwa kita telah mencapai akhir koleksi / file.

 Jelas, terserah kepada programmer untuk mengimplementasikan IEnumerator sehingga koleksi Anda dipotong dengan benar, tidak ada keajaiban.  Jika Anda membuat kelas sebagai IEnumerator, akan ada banyak metode untuk diterapkan sehingga iterasi berjalan sesuai.  Untuk sebagian besar kelas bawaan sudah dilakukan sehingga Anda dapat menggunakannya proses tanpa melakukan apa pun.  Contohnya:

 foreach (item var dalam koleksi) {}

 Ini hanya dapat berfungsi jika koleksi adalah tipe yang diturunkan dari IEnumerator.  Semua array, daftar, dan sebagainya, lakukan itu.

 Coroutine adalah objek dalam kesatuan yang memungkinkan untuk memulai tindakan paralel (atau hampir).  Saat menggunakan StartCoroutine, unity menciptakan objek tipe Coroutine baru, objek ini melakukan beberapa tindakan dan kemudian mengembalikan objek IEnumerator (atau tidak sama sekali):

 IEnumerator MyCoroutine () {

 while (true) {hasil pengembalian nol;}

 }

 Ini mengembalikan objek nol atau IEnumerator.  Coroutine membutuhkan MonoBehaviour untuk dilampirkan sehingga ia akan menggunakannya sebagai proses induk (jika terbiasa dengan Unix).  Proses induk itu memeriksa pada setiap frame jika memiliki coroutine yang tertunda, itu pada berbagai waktu dalam frame karena Anda dapat mengontrol kapan Anda ingin coroutine kembali:

 IEnumerator MyCoroutine () {

 indeks int = 0;

 while (true) {

 hasilkan WaitForEndOfFrame baru ();

 Debug.Log ("Frame is over");

 if (++ index == 3) {yield break;}

 }

 }

 Yang ini di atas, akan mulai dari kode, kemudian jalankan sampai mencapai garis kembali.  Pada saat itu, kami berada dalam Pembaruan MonoBehaviour (atau Terlambat / Tetap / Mulai / ...), dan akan kembali ke tempatnya semula.  Pada akhir frame, Unity akan melihat ke dalam MonoBehaviour itu dan menemukan coroutine itu, kembali dari garis hasil pengembalian dan berlanjut.  Itu akan melakukan itu 3 kali sampai istirahat.  Pada setiap putaran itu mengembalikan sebuah objek IEnumerator dari metode WaitForEndOFrame.

 Kesimpulan: IEnumerator adalah tipe .NET yang digunakan untuk memecah koleksi besar atau file, atau hanya untuk menghentikan iterasi.  Coroutine adalah tipe Unity yang digunakan untuk membuat tindakan paralel mengembalikan IEnumerator untuk melakukannya.

Posting Komentar

0 Komentar