Aracılığıyla paylaş


Windows Workflow Foundation Özel Durumları

İş akışları, bir iş akışının TryCatch yürütülmesi sırasında oluşturulan özel durumları işlemek için etkinliğini kullanabilir. Bu özel durumlar işlenebilir veya etkinlik kullanılarak Rethrow yeniden oluşturulabilir. Bölümdeki Finally etkinlikler, bölüm veya Catches bölüm tamamlandığında yürütülürTry. Bir örnek tarafından barındırılan OnUnhandledException iş akışları, bir WorkflowApplication etkinlik tarafından TryCatch işlenmeyen özel durumları işlemek için olay işleyicisini de kullanabilir.

Özel Durumların Nedenleri

Bir iş akışında, aşağıdaki yollarla özel durumlar oluşturulabilir:

  • içindeki TransactionScopeişlemler zaman aşımına uğradı.

  • etkinliği kullanılarak Throw iş akışı tarafından oluşan açık bir özel durum.

  • Bir etkinlikten .NET Framework 4.6.1 özel durumu oluştu.

  • İş akışında kullanılan kitaplıklar, bileşenler veya hizmetler gibi dış koddan oluşan bir özel durum.

Özel Durumları İşleme

Bir etkinlik tarafından özel durum oluşturulursa ve işlenmemişse, varsayılan davranış iş akışı örneğini sonlandırmaktır. Özel OnUnhandledException bir işleyici varsa, bu varsayılan davranışı geçersiz kılabilir. Bu işleyici, iş akışı ana bilgisayarı yazarına özel günlük kaydı, iş akışını durdurma, iş akışını iptal etme veya iş akışını sonlandırma gibi uygun işlemeyi sağlama fırsatı verir. bir iş akışı işlenmeyen bir özel durum oluşturursa, OnUnhandledException işleyici çağrılır. İş akışının nihai sonucunu belirleyen üç olası eylem döndürülür OnUnhandledException .

  • İptal - İptal edilen iş akışı örneği, dal yürütmesinin düzgün bir çıkışıdır. İptal davranışını modelleyebilirsiniz (örneğin, bir CancellationScope etkinliği kullanarak). İptal işlemi tamamlandığında Tamamlandı işleyicisi çağrılır. İptal edilen bir iş akışı İptal Edildi durumunda.

  • Terminate - Sonlandırılan iş akışı örneği sürdürülemez veya yeniden başlatılamaz. Bu, sonlandırıldığı neden olarak bir özel durum sağlayabileceğiniz Completed olayını tetikler. Sonlandırma işlemi tamamlandığında Sonlandırılan işleyici çağrılır. Sonlandırılan bir iş akışı Hatalı durumda.

  • Abort - Durdurulan iş akışı örnekleri ancak kalıcı olacak şekilde yapılandırılmışsa sürdürülebilir. Kalıcılık olmadan bir iş akışı sürdürülemez. Bir iş akışı durdurulduktan sonra, son kalıcılık noktasından bu yana yapılan tüm çalışmalar (bellekte) kaybolur. Durdurulan bir iş akışı için durdurulan işleyici, iptal işleminin tamamlanmasının nedeni olarak özel durum kullanılarak çağrılır. Ancak, İptal Edildi ve Sonlandırıldı'nın aksine, Tamamlandı işleyicisi çağrılmıyor. Durdurulan iş akışı Durduruldu durumunda.

Aşağıdaki örnek, özel durum oluşturan bir iş akışı çağırır. Özel durum iş akışı tarafından işlenmemiştir ve OnUnhandledException işleyici çağrılır. WorkflowApplicationUnhandledExceptionEventArgs özel durum hakkında bilgi sağlamak için incelenir ve iş akışı sonlandırılır.

Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Throw
        {
            Exception = new InArgument<Exception>((env) =>
                new ApplicationException("Something unexpected happened."))
        },
        new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

WorkflowApplication wfApp = new WorkflowApplication(wf);

wfApp.OnUnhandledException = delegate (WorkflowApplicationUnhandledExceptionEventArgs e)
{
    // Display the unhandled exception.
    Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
        e.InstanceId, e.UnhandledException.Message);

    Console.WriteLine("ExceptionSource: {0} - {1}",
        e.ExceptionSource.DisplayName, e.ExceptionSourceInstanceId);

    // Instruct the runtime to terminate the workflow.
    return UnhandledExceptionAction.Terminate;

    // Other choices are UnhandledExceptionAction.Abort and
    // UnhandledExceptionAction.Cancel
};

wfApp.Run();

TryCatch Etkinliği ile Özel Durumları İşleme

Bir iş akışı içindeki özel durumları işleme, etkinlikle birlikte TryCatch gerçekleştirilir. Etkinlik, TryCatch her biri Catch belirli Exception bir Catches türle ilişkilendirilmiş bir etkinlik koleksiyonuna sahiptir. Bir etkinliğin bölümünde TryCatch yer alan bir etkinlik tarafından oluşan özel durum koleksiyondaki TryCatches bir Catch<TException> etkinliğin özel durumuyla eşleşiyorsa, özel durum işlenir. Özel durum açıkça yeniden oluşturulursa veya yeni bir özel durum oluşursa, bu özel durum üst etkinliğe geçer. Aşağıdaki kod örneği, bölümünde bir TryCatch etkinlik tarafından atılan Try bir ApplicationException öğesini işleyen bir Throw etkinliği gösterir. Özel durumun iletisi, etkinlik tarafından Catch<TException> konsola yazılır ve ardından bölümünde konsola Finally bir ileti yazılır.

DelegateInArgument<ApplicationException> ex = new DelegateInArgument<ApplicationException>()
{
    Name = "ex"
};

Activity wf = new TryCatch
{
    Try = new Throw()
    {
        Exception = new InArgument<Exception>((env) => new ApplicationException("An ApplicationException was thrown."))
    },
    Catches =
    {
        new Catch<ApplicationException>
        {
            Action = new ActivityAction<ApplicationException>
            {
                Argument = ex,
                Handler = new WriteLine()
                {
                    Text = new InArgument<string>((env) => ex.Get(env).Message)
                }
            }
        }
    },
    Finally = new WriteLine()
    {
        Text = "Executing in Finally."
    }
};

Bölümdeki Finally etkinlikler, bölüm veya Catches bölüm başarıyla tamamlandığında yürütülürTry. Bu Try bölümden hiçbir özel durum atlanmamışsa bölüm başarıyla tamamlanıyor ve Catches hiçbir özel durum yoksa veya yeniden oluşturulursa bölüm başarıyla tamamlanıyor. bir öğesinin TryTryCatch bölümünde bir özel durum oluşturulursa ve bölümünde bir CatchesCatch<TException> tarafından işlenmezse veya bölümünden Catchesyeniden oluşturulursa, aşağıdakilerden biri gerçekleşmediği sürece içindeki Finally etkinlikleri yürütülemez.

Özel Durum İşleme ve Dengeleme

Özel durum işleme ile dengeleme arasındaki fark, özel durum işlemenin bir etkinliğin yürütülmesi sırasında gerçekleşmesidir. Dengeleme, bir etkinlik başarıyla tamamlandıktan sonra gerçekleşir. Özel durum işleme, etkinlik özel durumu yükselttiğinde temizleme fırsatı sağlarken dengeleme, daha önce tamamlanan bir etkinliğin başarıyla tamamlanan çalışmasının geri alınabileceği bir mekanizma sağlar. Daha fazla bilgi için bkz . Dengeleme.

Ayrıca bkz.