Blog
AsyncQueue: cola asincrona de tareas
3 years, 3 months ago Posted in: Blog Comments Off

AsyncQueue es una cola de tareas asincrona que sigue el patrón composite. es perfecta en el caso que tengas que ejecutar tareas muy pesadas que puedan bloquear el flash player, por ejemplo exportar varias imagenes.

Puedes descargarlo aqui: asyncqueue_as3

Adjunto un ejemplo:

[as]
package com.mattimatti.task{

import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.text.TextField;

public class ExampleAsyncOperationQueue extends Sprite
{

public var tf:TextField;

public function ExampleAsyncOperationQueue()
{

tf = new TextField();
addChild(tf);
tf.width = 800;
tf.height = 800;
tf.border = true;

// create main queue
var oAsyncQueue:AsyncQueue = new AsyncQueue(“Main”,”Main”,true);
oAsyncQueue.addEventListener(ProgressEvent.PROGRESS,onQueueProgress);
oAsyncQueue.addEventListener(Event.COMPLETE,onQueueCompleted);
oAsyncQueue.addEventListener(ErrorEvent.ERROR,onQueueError);

oAsyncQueue.log = tracer;

// add simple tasks
oAsyncQueue.addTask(new AbstractTask(“1″,”1″));
oAsyncQueue.addTask(new AbstractTask(“2″,”2″));

// create dependant queue
var oAsyncQueue2:AsyncQueue = new AsyncQueue(“Dependent”,”Dependent”);
oAsyncQueue2.log = tracer;
oAsyncQueue2.addTask(new AbstractTask(“3″,”3″));
oAsyncQueue2.addTask(new AbstractTask(“4″,”4″));

// create a proxy object
var oProxiedClass:ProxiedClass = new ProxiedClass();
oProxiedClass.log = tracer;

// create a task proxy to encapsulate async process
var oProxyClass:TaskProxy = new TaskProxy(“Proxy”,”Proxy”);
oProxyClass.log = tracer;
oProxyClass.createDelegate(oProxiedClass,oProxiedClass.encode,[new BitmapData(100,100)]);

// add to main queue
oAsyncQueue2.addTask(oProxyClass);

oAsyncQueue.addTask(oAsyncQueue2);

tracer(“———————————–”);

// run the queue
oAsyncQueue.run();

}

// trace the progress of the main queue
private function onQueueProgress( e:ProgressEvent ):void {
tracer(“MainQueue progress: ” + e.bytesLoaded +” out of “+ e.bytesTotal + ” > ” +e.target.label );
}

// trace the progress of the main queue
private function onQueueCompleted( e:Event ):void {
tracer(“MainQueue Completed”);
}

// trace the progress of the main queue
private function onQueueError( e:ErrorEvent ):void {
tracer(“MainQueue Error: ” + e.text);
}

public function tracer(inStr:String):void{
tf.text+=inStr+”\n”;
}

}
}

[/as]

Comments are closed.