Async/Await (Parte 5 de 11)
1Paralelización con async let
2Calcular tiempo de ejecución de un código
3¿Qué es un Task?
4¿Qué es un Actor y para que se utilizan?
5¿Qué es Main Actor?
6Modificador task
7Cómo utilizar Task Group
8Trabajando con iteraciones asíncronas usando AsyncSequence
9Mezclando código síncrono y asíncrono usando CheckedContinuation
10Optimiza la eficiencia de tu código concurrente con DiscardingTaskGroup
11Explorando Task-local
¿Qué es Main Actor?
Libranner Santos
19 marzo, 20232min de lectura
MainActor
es un singleton que ejecuta código en el hilo principal. En términos más completos, es un actor cuyo executor ejecuta código en el hilo principal, también conocido como main thread o UI thread.
Podemos usarlo de dos formas:
- Llamando el método
run
y pasando nuestro código en un closure:
await MainActor.run {await execute()}
- La segunda forma de usar
MainActor
es anotando nuestro código utilizando@MainActor
:
@MainActorfunc execute() async {//....}
Otras formas de usar @MainActor
Esto asegurará que nuestro código se ejecute en el hilo principal. También podemos utilizar esta notación en clases y task closures.
De la siguiente forma indicamos que una clase completa ejecutará sus operaciones en el hilo principal:
@MainActorclass myClass {// Aquí el código..}
Si queremos que un método en específico no se ejecute en el hilo principal, podemos hacerlo utilizando el modificador nonisolated
:
@MainActorclass myClass {func run() { ... }nonisolated func stop() { ... }}
En este caso run()
se ejecutará en el hilo principal, sin embargo, stop()
no.
Para indicar que un task closure ejecutará sus operaciones en el hilo principal, hacemos lo siguiente:
Task { @MainActor in// Aquí el código..}
Async/Await (Parte 5 de 11)
1Paralelización con async let
2Calcular tiempo de ejecución de un código
3¿Qué es un Task?
4¿Qué es un Actor y para que se utilizan?
5¿Qué es Main Actor?
6Modificador task
7Cómo utilizar Task Group
8Trabajando con iteraciones asíncronas usando AsyncSequence
9Mezclando código síncrono y asíncrono usando CheckedContinuation
10Optimiza la eficiencia de tu código concurrente con DiscardingTaskGroup
11Explorando Task-local