1.4Kпросмотров
46.7%от подписчиков
12 февраля 2026 г.
📷 ФотоScore: 1.5K
Hola, Amigos! Async/await и Isolate оба помогают держать UI плавным, но решают разные задачи. Сегодня обсудим, что и в каких ситуациях лучше использовать. Неправильно: async/await для CPU-тяжелой задачи Future<String> processBigData() async { final raw = await fetchHugeJson(); // ← I/O — ок final data = jsonDecode(raw); // ← блокирует UI ~1с final result = heavyMath(data); // ← ещё ~1с return result;
} Правильно и просто: compute() import 'package:flutter/foundation.dart'; Future<String> processBigData() async { final raw = await fetchHugeJson(); // сеть — ок return compute(_heavyWork, raw); // ← выполняется в Isolate
} String _heavyWork(String json) { final data = jsonDecode(json); return heavyMath(data);
} Когда нужен полный контроль, подойдет Raw Isolate Future<void> startWorker() async { final receivePort = ReceivePort(); isolate = await Isolate.spawn(_worker, receivePort.sendPort); sendPort = await receivePort.first as SendPort;
} Future<String> doHeavyTask(String input) async { final response = ReceivePort(); sendPort.send([input, response.sendPort]); return await response.first as String;
} static void _worker(SendPort mainPort) async { final port = ReceivePort(); mainPort.send(port.sendPort); await for (final msg in port) { final input = msg[0] as String; final replyTo = msg[1] as SendPort; replyTo.send("processed: $input"); // heavy work here }
} Разберем по ситуации: - Блокирует main thread > ~300 мс → compute()
- Просто ждет (network/db) → async/await
- Нужен worker с диалогом → raw Isolate А ты пользуешься Isolate/compute или решаешь через async/await? Делись опытом ⚙️