El paquete de retraso

import "google.golang.org/appengine/delay"

Introducción

El retraso del paquete proporciona una forma de ejecutar el código fuera del alcance de la solicitud del usuario mediante la API de la lista de tareas en cola.

Para declarar una función que podría ejecutarse más adelante, llama a Func en el contexto de asignación del nivel superior, pásale una clave de string arbitraria y una función cuyo primer argumento sea del tipo context.Context.

var laterFunc = delay.Func("key", myFunc)

También es posible utilizar una función literal.

var laterFunc = delay.Func("key", func(c context.Context, x string) {
    // ...
})

Para llamar a una función, invoca su método de llamada.

laterFunc.Call(c, "something")

Se la puede llamar varias veces. Si la función tiene argumentos de retorno y el último es un error de tipo, la función podría mostrar un error que no es nulo en la cola para mostrarle a la cola que se debería reintentar la función.

Las funciones de los argumentos pueden ser de cualquier tipo codificable por el paquete gob. Si un argumento es un tipo de interfaz, es responsabilidad del cliente registrar con el paquete gob cualquier tipo concreto que se pase para ese argumento. Consulta http://golang.org/pkg/gob/#Register si deseas obtener más información al respecto.

Cualquier error durante la inicialización o ejecución de una función se registrará en los registros de la aplicación. Los registros de errores que ocurran durante la inicialización se asociarán con la solicitud que invocó el método de llamada.

El estado de una invocación de función que todavía no se ejecutó correctamente se preserva mediante la combinación del nombre del archivo en el cual se declaró con la clave de la string que se pasó a la función Func. La actualización de una app con invocaciones de funciones pendientes es segura, siempre y cuando las funciones relevantes tengan la combinación (nombre de archivo, clave) preservada.

El paquete de demora utiliza la API de lista de tareas en cola a fin de crear tareas que llamen a la ruta de la aplicación reservada "/_ah/queue/go/delay". Esa ruta no debe estar marcada como "login: required" en app.yaml; debe estar marcada como "login: admin" o no tener restricción de acceso.

Índice

type Function
    func Func(key string, i interface{}) *Function
    func (f *Function) Call(c context.Context, args ...interface{}) error
    func (f *Function) Task(args ...interface{}) (*taskqueue.Task, error)

type Function

type Function struct {
    // contains filtered or unexported fields
}

Function representa una función que puede tener una invocación retrasada.

func Func

func Func(key string, i interface{}) *Function

Func declara una nueva Function. El segundo argumento debe ser una función con un primer argumento de tipo context.Context. A esta función se la debe llamar durante la inicialización del programa. Eso significa que se la debe llamar en una declaración de variable global o desde una función init. Esta restricción es necesaria, ya que la instancia que retrase una llamada a una función no podrá ser la que la ejecute. Solamente el código ejecutado durante la inicialización del programa tiene garantizada la ejecución por parte de la instancia antes de recibir una solicitud.

func (*Function) Call

func (f *Function) Call(c context.Context, args ...interface{}) error

La llamada invoca una función retrasada.

err := f.Call(c, ...)

es equivalente a

t, _ := f.Task(...)
_, err := taskqueue.Add(c, t, "")

func (*Function) Task

func (f *Function) Task(args ...interface{}) (*taskqueue.Task, error)

La tarea crea una Tarea que invocará la función. Sus parámetros pueden ajustarse antes de agregarla a una cola. Los usuarios no deberían modificar los campos Ruta o Carga útil de la Tarea que se muestra.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Go