Senkronize olmayan yürütme modelini anlama

Adobe AIR 1.0 ve üstü

Senkronize olmayan yürütme modunun kullanımına ilişkin yaygın bir kanı, aynı veritabanı bağlantısına karşı başka bir SQLStatement örneğini başlatmayacak olmanıza ilişkin varsayımdır. Gerçekte, bu varsayım doğru değildir. SQLStatement örneği yürütülürken ifadenin text özelliğini değiştiremezsiniz. Ancak, yürütmek istediğiniz her farklı SQLStatement örneği için ayrı bir SQLStatement örneği kullanırsanız, başka bir SQLStatement örneği hala yürütülüyorken hataya neden olmadan execute() yöntemini çağırabilirsiniz.

Dahili olarak, veritabanı işlemlerimi senkronize olmayan yürütme modunu kullanarak yürüttüğünüzde, her veritabanı bağlantısı (her SQLConnection örneği) gerçekleştirme talimatını verdiğiniz kendi işlem kuyruğu veya listesine sahiptir. Çalışma zamanı her işlemi kuyruğa eklendikleri sırayla yürütür. Bir SQLStatement örneği oluşturduğunuzda ve bu örneğin execute() yöntemini çağırdığınızda, ifade yürütme işlemi bağlantı için kuyruğa eklenir. Bu SQLConnection örneğinde o anda yürütülen bir işlem yoksa, ifade arka planda yürütülmeye başlar. Kodla aynı blok içinde başka bir SQLStatement örneği oluşturduğunuzu ve bu yöntemin execute() yöntemini de çağırdığınızı varsayın. Bu ikinci ifade yürütme işlemi, kuyrukta ilk ifadenin arkasına eklenir. İlk ifadenin yürütülmesi tamamlanır tamamlanmaz, çalışma zamanı kuyruktaki bir sonraki işleme geçer. Ana uygulama kodunda ilk işleme ilişkin result olayının gönderildiği sırada bile, kuyrukta yer alan sonraki işlemlerin yürütülmesi arka planda devam eder. Aşağıdaki kod bu tekniği gösterir:

// Using asynchronous execution mode 
var stmt1:SQLStatement = new SQLStatement(); 
stmt1.sqlConnection = conn; 
     
// ... Set statement text and parameters, and register event listeners ... 
     
stmt1.execute(); 
     
// At this point stmt1's execute() operation is added to conn's execution queue. 
     
var stmt2:SQLStatement = new SQLStatement(); 
stmt2.sqlConnection = conn; 
     
// ... Set statement text and parameters, and register event listeners ... 
     
stmt2.execute(); 
     
// At this point stmt2's execute() operation is added to conn's execution queue. 
// When stmt1 finishes executing, stmt2 will immediately begin executing  
// in the background. 

Ardarda kuyruğa alınan ifadeleri otomatik olarak yürüten veritabanının önemli bir yan etkisi vardır. Bir ifade başka bir işlemin sonucuna bağlıysa, ilk işlem tamamlanana kadar bu ifadeyi kuyruğa ekleyemezsiniz. (Başka bir deyişle, bu ifadenin execute() yöntemini çağıramazsınız.) Çünkü ikinci ifadenin execute() yöntemini bir kez çağırdığınızda, ifadenin text veya parameters özelliklerini değiştiremezsiniz. Bu durumda sonraki işlemi başlatmak için, ilk işlemin tamamlandığını gösteren olayı beklemeniz gerekir. Örneğin, işlem bağlamında bir ifade yürütmek istiyorsanız, ifadenin yürütülmesi işlemi açma işlemine bağlıdır. İşlemi açmak için SQLConnection.begin() yöntemini çağırdıktan sonra SQLConnection örneğinin begin olayını göndermesini beklemeniz gerekir. Daha sonra SQLStatement örneğinin execute() yöntemini çağırabilirsiniz. Bu örnekte uygulamayı işlemlerin düzgün biçimde yürütülmesini sağlayacak biçimde düzenlemenin en basit yolu, begin olayı için dinleyici olarak kaydedilen bir yöntem oluşturmaktır. SQLStatement.execute() yöntemini çağıracak kod, bu dinleyici yönteminin içine yerleştirilir.