Aracılığıyla paylaş


İş Akışı Yürütme Özellikleri

CLR, iş parçacığı yerel depolama (TLS) aracılığıyla her iş parçacığı için bir yürütme bağlamı tutar. Bu yürütme bağlamı, adlandırılmış yuvalar gibi kullanıcı tanımlı iş parçacığı özelliklerine ek olarak iş parçacığı kimliği, ortam işlemi ve geçerli izin kümesi gibi iyi bilinen iş parçacığı özelliklerini yönetir.

CLR'yi doğrudan hedefleyen programlardan farklı olarak iş akışı programları, iş parçacığından bağımsız bir ortamda yürütülen etkinliklerin hiyerarşik olarak kapsamlı ağaçlarıdır. Bu, standart TLS mekanizmalarının belirli bir iş öğesinin kapsamındaki bağlamı belirlemek için doğrudan kullanılamayacağı anlamına gelir. Örneğin, yürütmenin iki paralel dalı farklı işlemler kullanabilir, ancak zamanlayıcı yürütmelerini aynı CLR iş parçacığında bir araya ekleyebilir.

İş akışı yürütme özellikleri, bir etkinliğin ortamına bağlama özgü özellikler eklemek için bir mekanizma sağlar. Bu, bir etkinliğin alt ağacı için hangi özelliklerin kapsam içinde olduğunu bildirmesine olanak tanır ve ayrıca CLR nesneleriyle düzgün bir şekilde birlikte çalışabilmek için TLS'yi ayarlamaya ve kaldırmaya yönelik kancalar sağlar.

İş Akışı Yürütme Özelliklerini Oluşturma ve Kullanma

İş akışı yürütme özellikleri genellikle IExecutionProperty arabirimini uygular, ancak mesajlaşmaya odaklanan özellikler ISendMessageCallback ve IReceiveMessageCallback arabirimlerini uygulayabilir. İş akışı yürütme özelliği oluşturmak için arabirimini uygulayan IExecutionProperty ve üyelerini SetupWorkflowThread ve CleanupWorkflowThreaduygulayan bir sınıf oluşturun. Bu üyeler, yürütme özelliğine, özelliği içeren etkinliğin ve varsa alt etkinliklerin her iş darbesinde yerel iş parçacığı depolamasını düzgün bir şekilde ayarlama ve kaldırma fırsatı sağlar. Bu örnekte, ConsoleColorProperty öğesini ayarlayan bir Console.ForegroundColor oluşturulur.

class ConsoleColorProperty : IExecutionProperty  
{  
    public const string Name = "ConsoleColorProperty";  
  
    ConsoleColor original;  
    ConsoleColor color;  
  
    public ConsoleColorProperty(ConsoleColor color)  
    {  
        this.color = color;  
    }  
  
    void IExecutionProperty.SetupWorkflowThread()  
    {  
        original = Console.ForegroundColor;  
        Console.ForegroundColor = color;  
    }  
  
    void IExecutionProperty.CleanupWorkflowThread()  
    {  
        Console.ForegroundColor = original;  
    }  
}  

Etkinlik yazarları, bu özelliği etkinliğin yürütme geçersiz kılmasında kaydederek kullanabilirler. Bu örnekte, ConsoleColorScope etkinliği, ConsoleColorProperty öğesini geçerli Properties koleksiyonuna ekleyerek NativeActivityContext kaydeder biçimde tanımlanmıştır.

public sealed class ConsoleColorScope : NativeActivity  
{  
    public ConsoleColorScope()  
        : base()  
    {  
    }  
  
    public ConsoleColor Color { get; set; }  
    public Activity Body { get; set; }  
  
    protected override void Execute(NativeActivityContext context)  
    {  
        context.Properties.Add(ConsoleColorProperty.Name, new ConsoleColorProperty(this.Color));  
  
        if (this.Body != null)  
        {  
            context.ScheduleActivity(this.Body);  
        }  
    }  
}  

Etkinliğin gövdesi bir iş akışı başlattığında, özelliğin SetupWorkflowThread yöntemi çağrılır ve iş akışı tamamlandığında CleanupWorkflowThread çağrılır. Bu örnekte, üç dallı bir etkinlik kullanan bir Parallel iş akışı oluşturulur. İlk iki dal etkinliği ConsoleColorScope kullanır ve üçüncü dal kullanmaz. Üç dal da iki WriteLine etkinlik ve bir Delay etkinlik içerir. Parallel etkinlik yürütüldüğünde, dallarda yer alan etkinlikler birbirine geçmeli şekilde yürütülür, ancak her alt etkinlik yürütüldüğünde, doğru konsol rengi ConsoleColorProperty tarafından uygulanır.

Activity wf = new Parallel  
{  
    Branches =
    {  
        new ConsoleColorScope  
        {  
            Color = ConsoleColor.Blue,  
            Body = new Sequence  
            {  
                Activities =
                {  
                    new WriteLine  
                    {  
                        Text = "Start blue text."  
                    },  
                    new Delay  
                    {  
                        Duration = TimeSpan.FromSeconds(1)  
                    },  
                    new WriteLine  
                    {  
                        Text = "End blue text."  
                    }  
                }  
            }  
        },  
        new ConsoleColorScope  
        {  
            Color = ConsoleColor.Red,  
            Body = new Sequence  
            {  
                Activities =
                {  
                    new WriteLine  
                    {  
                        Text = "Start red text."  
                    },  
                    new Delay  
                    {  
                        Duration = TimeSpan.FromSeconds(1)  
                    },  
                    new WriteLine  
                    {  
                        Text = "End red text."  
                    }  
                }  
            }  
        },  
        new Sequence  
        {  
            Activities =
            {  
                new WriteLine  
                {  
                    Text = "Start default text."  
                },  
                new Delay  
                {  
                    Duration = TimeSpan.FromSeconds(1)  
                },  
                new WriteLine  
                {  
                    Text = "End default text."  
                }  
            }  
        }  
    }  
};  
  
WorkflowInvoker.Invoke(wf);  

İş akışı çağrıldığında konsol penceresine aşağıdaki çıkış yazılır.

Start blue text.  
Start red text.  
Start default text.  
End blue text.  
End red text.  
End default text.  

Uyarı

Önceki çıkışta gösterilmese de, konsol penceresindeki her metin satırı belirtilen renkte görüntülenir.

İş akışı yürütme özellikleri özel etkinlik yazarları tarafından kullanılabilir ve ayrıca ve CorrelationScope etkinlikleri gibi TransactionScope etkinlikler için işleme yönetimi mekanizması sağlar.

Ayrıca bakınız