• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

245
Views
¿Cuál es el "actor actual" en el modelo Swift Concurrency?

Leyendo la sección de Concurrencia de la Guía Swift, me encontré con:

Para crear una tarea no estructurada que se ejecute en el actor actual, llame al Task.init(priority:operation:) . Para crear una tarea no estructurada que no forme parte del actor actual, conocida más específicamente como tarea separada, llame al método de clase Task.detached(priority:operation:) .

Está la frase "actor actual". Esto también se menciona en la documentación de Task.init :

Ejecuta la operación de no lanzamiento dada de forma asincrónica como parte de una nueva tarea de nivel superior en nombre del actor actual.

Antes, creía haber entendido lo que significaba "actor actual":

  • si el código se ejecuta en la cola principal, entonces el actor actual puede considerarse MainActor , ya que su ejecutor es la cola principal.
  • si el código está marcado con un atributo de actor global, entonces su actor actual es ese actor global
  • si el código está en un actor y no está nonisolated , entonces su actor actual es ese actor.
 @SomeOtherActor func somethingElse() { DispatchQueue.main.async { // current actor is MainActor } } @MainActor class Foo: NSObject { func foo() { /* current actor is MainActor */ } } actor Bar { func foo() { /* current actor is Bar */ } }

Sin embargo, recientemente me di cuenta de que olvidé considerar una situación: ¿qué sucede en una cola global (o cualquier otra cola aleatoria)?

 @SomeOtherActor func somethingElse() { DispatchQueue.global().async { // current actor is? } }

Cuando intenté acceder a una de las propiedades aisladas del actor de SomeOtherActor en el cierre, recibí el mensaje:

La propiedad 'x' aislada del actor global 'SomeOtherActor' no se puede mutar desde un contexto no aislado

¿Es esa la forma en que Swift dice que no hay un actor actual? Si es así, ¿qué hará Task.init ? La documentación realmente no dice.

Idealmente, ¿hay alguna forma de imprimir programáticamente al actor actual?

Pensé que las propuestas de SE explicarían qué significa "actor actual". Ninguna de las propuestas de SE menciona la palabra "actor actual": SE-0306 , SE-0313 , SE-0316 , SE-0327 , SE-0344 .

over 3 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error