Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Devlog без QA | Розробка ігор
Added 06 Dec 2025

Devlog без QA | Розробка ігор

@GameDevelopmentUA
Number of subscribers: 632
Photos: 275
Videos: 105
Links: 520
Description:
Unity/Новини/Ідеї/Натхнення й інший якісний (а можливо і не дуже) контент тут! Зв’язок: @DevAndrew Анти-скам бот: @IndieSafeBot
Source

Devlog без QA | Розробка ігор | Корутини & Task в C#Так. Почнемо з простого: чи всі взагалі знають різ...

Telegram community logo - UA Game Development | Український геймдев Devlog без QA | Розробка ігор @GameDevelopmentUA
412 Views/Reach 2025-12-25 17:15 Message №460
🧐 Корутини & Task в C#Так. Почнемо з простого: чи всі взагалі знають різницю?Особисто я — людина, яка майже не використовувала Task, — ніколи їх навіть не порівнював і тим паче не замислювався, у чому ж між ними різниця.Давайте поясню:📱 Таски (Task) у C#:  це асинхронні операції переважно реалізовані в рамках Task-based Asynchronous Pattern (TAP). Центральним класом є System.Threading.Tasks.Task, який «представляє одну операцію, що не повертає значення і зазвичай виконується асинхронно».Що це означає? Це спосіб запустити якусь роботу так, щоб програма не зависала і могла займатись іншими справами, поки ця робота виконується. Задачі (Tasks) зазвичай використовуються для виконання асинхронної роботи поза основним (UI) потоком, зокрема через пул потоків .NET.При використанні ключового слова async/await компілятор C# «перетворює ваш код у станoву машину». Це означає, що метод, який містить await, компілюється у спеціальний клас, що відстежує, де саме припинити виконання і як відновити його після завершення фонової операції. Також оператор await призупиняє виконання поточного методу та повертає керування його виклику, не блокуючи при цьому потік.📱 Coroutines в Unity використовують механізм yield return для очікування різних подій (наступного кадру, затримки через WaitForSeconds тощо). Unity щокадру перевіряє список активних корутин: якщо відбулася подія очікування (наприклад, минув час WaitForSeconds або настало наступне оновлення кадру після yield return null), відповідна корутина відновлює виконання. Таким чином корутина «розбиває» завдання на частини по кадрах, але завжди в межах основного потоку рушія.Не переживайте. Лінки на які не які документації я залишу 😅 Якщо підсумувати основні відміності:Потоковий контекст: Задачі C# зазвичай працюють у фонових потоках, звільняючи основний потік для інших операцій. А Unity-корутини навпаки виконуються виключно на основному потоці рушія (ігровому циклі).• Механізм виконання: У C# асинхронний метод з await компілюється в станoву машину, яка «відслідковує виконання на await та продовжує його після завершення фонового завдання». Корутина ж реалізована через ітератор IEnumerator і генерує схожий механізм: під час компіляції C# утворюється клас, що зберігає поточний стан методу між yield-блоками.• Синхронізація та очікування: У TAP-методі C# очікування завершується подією/сигналом: коли фонове завдання виконується, воно «оповіщає» про свій стан, і тоді викликаються методи-продовжувачі (continuations). Це не вимагає постійного опитування як в Unity-корутинах, де перевірка відбувається щокадру.• Призначення та використання: а тут самі подумайте: хто з Вас використовував таски для якихось анімацій (чи для чого там ще потрібні корутини))?. Task призначені для будь-якого асинхронного програмування (мережевих запитів, паралельних обчислень тощо).ℹ️ Джерела: [Task.class] / [Asynchronous] / [await] / [Coroutines]Не знаю чи заходить вам такого роду контент, але сподіваюся, що так.Наступного разу, можливо, розкажу "що це за потоки" / Threads трішки детальніше 🔥✈️ Gamedev | #уроки #csharp #tasks #coroutines #unity #async #gamedev