1 votos

¿Condiciones de carrera en Tasker?

Estoy tratando de aprender Tasker, y parece que ejecuta sus pasos de forma asíncrona, por lo que termino con una condición de carrera donde mi tarea no tiene los datos que necesita para continuar. Hice un par de tareas simples para probar. (Información sobre el hardware: LG G2 en Verizon ejecutando la ROM KitKat original, rooteado).

Tarea 1: Eco

  1. Conjunto de variables: [Nombre: %ret; A: %par1]
  2. Flash: [Texto: Par1 = %par1]
  3. Retorno: [Valor: %ret; Stop: On]

Tarea 2: Prueba del eco

  1. Realizar tarea: [Nombre: Eco; Prioridad: 2; Parámetro 1 (%par1): 5; Variable de valor de retorno: %var]
  2. Conjunto de variables: [Nombre: %dbl; To: %var * 2; Do Maths: On]
  3. Flash: [Texto: %var * 2 = %dbl]

Resultado esperado:

  1. Flash: "Par1 = 5"
  2. Flash: "5 * 2 = 10"

La salida real:

  1. Flash: "%var * 2 = 0"
  2. Flash: "Par1 = 5"

Mi pregunta es, ¿por qué Tasker no espera a que se complete el paso 1 antes de continuar con el paso 2? De hecho, ni siquiera estoy seguro de que funcione correctamente en primer lugar. En mi tarea Echo Test, he añadido una espera de 2 segundos después de llamar a la tarea Echo, y ahora mi salida es esta:

  1. Flash: "Par1 = 5"
  2. Flash: "%var * 2 = 0"

Así que el %var no parece que se establezca en absoluto. ¿Estoy haciendo algo mal, o mi instalación de Tasker es mala?

3voto

The3rdIcon Puntos 95

Hay dos posibles soluciones.

Uno, cuando usas "Realizar tarea", puedes elegir la prioridad de la tarea que le estás pidiendo que ejecute. Si estableces la prioridad igual o superior a la de la tarea actual (una buena forma de hacerlo es especificar %priority + 1 ), la nueva tarea se ejecutará completamente antes de que se reanude la actual. Si establece la prioridad de la tarea más baja que la de la tarea actual, la tarea actual terminará antes de que comience la nueva tarea.

Como he tenido resultados mixtos con el uso de la prioridad, podrías añadir un "Esperar hasta" después de la tarea de ejecución. Ejemplo:

1. WAIT UNTIL
      MIN: 1
      UNTIL: %Done IS SET

La variable, %Done se establece en la última línea de la tarea que ha llamado. Puede establecer %Done a cualquier cosa, pero uno se establece la primera tarea sabrá que está bien para continuar.

0 votos

Resulta que la prioridad era la culpable. Gracias. Lo siento, aún no puedo votar a favor soy demasiado nuevo.

0 votos

Gran respuesta. Utilizo la prioridad+1 con frecuencia, pero me gusta la sugerencia adicional de utilizar esperar hasta si tienes una situación en la que necesitas estar seguro.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X