WF - Parallel Activity

Windows Workflow (WF) teknolojisini kullanarak uygulama geliÅŸtirmek istediÄŸimizde kullanabileceÄŸimiz adımları incelemeye devam ediyoruz. Åžu ana kadar incelemiÅŸ olduÄŸumuz iÅŸ akışı tipleri sürekli olarak tek sequence activty 'den oluÅŸmakta ve tek yönlü bir iÅŸ akışı süreci oluÅŸmaktadır. EÄŸer ki ÅŸu ana kadar görmüÅŸ olduÄŸumuz yöntemler de akış esnasında herhangi bir adım sonrasında aynı anda iki akış baÅŸlatmak istediÄŸimizde bu durumu gerçekleÅŸtirme ÅŸansımız olmayacaktı. EÄŸer ki bir ÅŸekilde yapmaya çalışırsakta oldukça uÄŸraÅŸtırıcı bir yöntem olacaktır. Bu tür ihtiyaçlarımızı karşılamak için toolbox 'ımızın içeriÄŸini incelediÄŸimizde parallel activity bileÅŸenini görüyor olacağız. Bu bileÅŸen yardımı ile herhangi bir adımdan sonra uygulamamıza ya da tasarladığımız akış esnasında birden fazla iÅŸlemi aynı anda yapabilmemize olanak tanıyacaktır. Bu yazımızda ilk olarak paralel activity 'i tanıyacağız. Sonrasında örnekler ile nasıl kullanabileceÄŸimize göz attıktan sonra nelere deÄŸindiÄŸimizi özet olarak göz attıktan sonra yazımızı tamamlamış olacağız.

Parallel Activity 'ler iki ya da daha fazla Sequence Activity 'lerden oluÅŸmaktadır. Bu aktivite bileÅŸeni birden fazla sequence activity 'i ve içerisinde yapılmış olan iÅŸlemlerin teorik olarak aynı anda baÅŸlamasını planlamaktadır. Ancak teorik olarak yer olan bütün sequence activity lerin aynı anda baÅŸlayacağı söylense de gerçekte böyle bir durum oluÅŸmaz. Belirsiz bir rastgelelik ile birbirilerini takip ederek gerçekleÅŸmektedir. Yani a aktivitesi tamamlandıktan sonra b aktivitesi baÅŸlar ve sonrasında yeniden a aktivitesinin baÅŸlayabileceÄŸi gibi b aktivitesi de baÅŸlayıp tamamlanabilir. Ancak bu rastgelelik iki iÅŸleminde sorunsuzca gerçekleÅŸmesini ve tamamlanmasında herhangi bir engel taşımamaktadır. Ä°ÅŸlemin en sonunda her iki aktiviteninde sorunsuzca tamamlandığı gözlemlenecektir.

Parallel activity 'lerin ektileyici özelliklerinden biri de dallarda yer alan sequence aktivitelerden herhangi biri Delay Activity yer alırsa, bunun bitmesi beklenmez ve bir diÄŸer daldaki activiteye geçilir ve akışın sorunsuzca iÅŸlemesi saÄŸlanmış olur. Bu iÅŸlemlerin bu ÅŸekilde çalışmasının en basit açıklaması ise bizim hazırlamış olduÄŸumuz uygulamaların iÅŸletim sistemleri üzerinde çalışıyor olması ve iÅŸletim sistemi de üzerinde çalışan iÅŸlemleri thread 'ler ile iÅŸletmesinden kaynaklanmaktadır. Thread 'lerde birbirlerinin tamamlanmasını beklemek yerine herhangi bir rastgelelik ile çalışmasından ötürü uygulamanın beklemesi ya da herhangi bir sebepten ötürü bozulması durumunda sırada bekleyen diÄŸer iÅŸ parçacığına geçerek iÅŸlemi devam ettiriyor olmasıdır.

Delay Activity, iÅŸ akışını belirli bir süre duraklamasını ve sonrasında da çıkmasına olanak tanımaktadır. TimeoutDuration ve TimeSpan özelliklerini kullanılır.

Parallel Activity sınıfı System.Workflow.Activities isim alanı altında yer almaktadır. Parallel aktiviteleren sık olarak while döngüsünün kullanılması gereken durumlarda görülmektedir.

Genel olarak paralel actviteyi tanıdığımıza göre artık örneklere geçiÅŸ yapabiliriz. Bu yazımızda geliÅŸtireceÄŸimiz örneÄŸi Visual Studio 2010 RC1 sürümünde geliÅŸtiriyor olacağız. Ancak .Net Framework 3.0 sürümünü kullanacağımız için Visual Studio 2008 ya da gerekli eklentileri yüklenmiÅŸ 2005 sürümünde de sorunsuzca geliÅŸtirilebilir.

Projemizi Workflow seçeneÄŸi altında yer alan Sequential Workflow Console Application proje ÅŸablonu üzerinde geliÅŸtiriyor olacağız. Proje oluÅŸtulduÄŸunda karşımıza Sequential Workflow tasarım ekranı gelecektir.


ÖrneÄŸimizi paralel atvitileer ile yapacağımız için bir adet bu aktivite tipinden tasarım ekranına sürükleyoruz.



GöreceÄŸiniz üzere paralel aktiviteyi tasarım ekranına eklediÄŸimizde iki tane sequence acticity 'nin eklendiÄŸini göreceÄŸiz. Peki iki deÄŸilde daha fazla akışı aynı anda çalıştırmak istediÄŸimizde nasıl bir yol izlememiz gerekmektedir. Bunun için paralel aktivite üzerinde saÄŸ tıklama yaptıktan sonra açılan menüden Add Branch seçeneÄŸine tıklamamız yeterli olacaktır. Bu iÅŸlem sonrasında artık karşımızda aynı anda çalıştıracağımız üç adet akış olacaktır. Bu iÅŸlemi tekrarlayarak ihtiyacımız kadar akış ekleyebilmemiz mümkündür.



Ayrıca paralel aktiviteler içerisinde de akışın iptal olması ya da bozulması durumunda yapılacak iÅŸlemler için gerekli özellikler yer almaktadır.

Åžimdi uygulama geliÅŸtirmek için gerekli olan bileÅŸenleri ekliyoruz ve tasarım ekranında geliÅŸtirmiÅŸ olduÄŸumuz akış aÅŸağıdaki görünüme kavuÅŸuyor.


Şimdi ise eklemiş olduğumuz CodeActivity lerin arka plan kodlarını yazarak işlemlerimize devam ediyoruz.

using System;

using System.Workflow.Activities;

namespace ParallelActivity
{
    public sealed partial class Workflow1 : SequentialWorkflowActivity
    {
        public Workflow1()
        {
            InitializeComponent();
        }

        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            Console.WriteLine("Sol taraf çalıştı.");
            solTarafSay++;
        }

        private void codeActivity2_ExecuteCode(object sender, EventArgs e)
        {
            Console.WriteLine("Sag taraf çalıştı.");
            sagTarafSay++;
        }

        private int solTarafSay;
        private int sagTarafSay;
    }
}

Ayrıca while döngüleri içerisinde kullanacak olduÄŸumuz özellikleri de tanımladık. Sonrasında while bileÅŸenin üzerinde saÄŸ tıkladıktan sonra özelliklerinden condition deÄŸerine System.Workflow.Activities.Rules.RuleConditionReference deÄŸerini atıyoruz. Condition özelliÄŸine ise aÅŸağıda belirtiÄŸimiz ÅŸekilde tanımlıyoruz.



Hem sol tarafı hem de  saÄŸ tarafı tanımladıktan sonra while döngülerinin özelliklerinde yer alan condition seçeneÄŸine baktığımızda aÅŸağıdaki görünüme benzer bir hal alması gerekmektedir.



SoSon olarak aktivitenin dallarına delay activity eklerek bekleme durumunda nasıl bir iÅŸlem yapacağını gözlemleyeceÄŸiz. Ayrıca tamamlandığını belirtmesi için akışın en sonuna bir tane daha kod aktivitesi ekliyoruz ve geliÅŸtirme iÅŸlemini tamamlıyoruz.



Sol taraftaki bekleme deÄŸerini bir saniye, saÄŸ taraftaki bekeleme deÄŸerini iki saniye olarak verdiÄŸimizi hatıralatarak hazırlamış akışı çalıştırıyoruz.



OluÅŸan program çıktısından da göreceÄŸiniz üzere paralel aktivite bizim belirtmiÅŸ olduÄŸumuz bekleme sürelerinin aksine ilk baÅŸta sıra ile çalışmasının aksine rastgelelik ile çalıştığını da bu sayede gözlemlemiÅŸ oluyoruz.

Sonuç olarak yazımızı toparlamak gerekirse, paralel aktivitelerin birden fazla iÅŸ akışını çalıştırabildiÄŸini ve bu akışları aynı anda deÄŸil thread lere baÄŸlı olarak rastgele bir sıradanlıkla çalıştırdığını öÄŸrendik. Sonrasında hazırlamış olduÄŸumuz örnek yardımı ile bu anlattış olduÄŸumuz bilgileri doÄŸrulyarak yazımızı tamamladık. Bir sonraki WWF yazımızda Condition kavramına deÄŸiniyor olacağız.

Umarım yararlı olabilmiştir.

Turhal Temizer
info@turhaltemizer.com

Yorum Gönder

0 Yorumlar

Ad Code

Responsive Advertisement