Megosztás a következőn keresztül:


Windows-munkafolyamat-architektúra

A Windows Workflow Foundation (WF) az absztrakció szintjét emeli az interaktív, hosszú ideig futó alkalmazások fejlesztéséhez. A munkaegységek tevékenységekként vannak beágyazva. A tevékenységek olyan környezetben futnak, amely lehetővé teszi a folyamatvezérlést, a kivételkezelést, a hibaterjesztést, az állapotadatok megőrzését, a folyamatban lévő munkafolyamatok betöltését és eltávolítását a memóriából, a nyomon követésből és a tranzakciós folyamatból.

Tevékenységarchitektúra

A tevékenységek olyan CLR-típusokként vannak kifejlesztve, amelyek Activityegy értéket Activity<TResult>CodeActivity<TResult>AsyncCodeActivity<TResult>visszaadó, AsyncCodeActivityCodeActivityNativeActivityvagy .NativeActivity<TResult> Olyan tevékenységek fejlesztése, amelyek alapján Activity a felhasználó összeállíthatja a már meglévő tevékenységeket, így gyorsan létrehozhat olyan munkaegységeket, amelyek a munkafolyamat-környezetben futnak. CodeActivitymásrészt lehetővé teszi a végrehajtási logika szerkesztését felügyelt kódban CodeActivityContext , elsősorban tevékenységargumentumokhoz való hozzáférés céljából. AsyncCodeActivityCodeActivity hasonló azzal a kivételrel, hogy aszinkron feladatok megvalósításához használható. Olyan tevékenységek fejlesztése, amelyekből a NativeActivity felhasználók hozzáférhetnek a futtatókörnyezethez olyan funkciókkal, mint a NativeActivityContext gyermekek ütemezése, könyvjelzők létrehozása, aszinkron munka meghívása, tranzakciók regisztrálása stb.

A forrásból Activity származó szerzői tevékenységek deklaratívak, és ezek a tevékenységek az XAML-ben is létrehozhatóak. Az alábbi példában a rendszer más tevékenységek használatával hoz létre egy meghívott Prompt tevékenységet a végrehajtási törzs számára.

<Activity x:Class='Prompt'  
  xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'  
    xmlns:z='http://schemas.microsoft.com/netfx/2008/xaml/schema'  
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'  
xmlns:s="clr-namespace:System;assembly=mscorlib"  
xmlns="http://schemas.microsoft.com/2009/workflow">  
<z:SchemaType.Members>  
  <z:SchemaType.SchemaProperty Name='Text' Type='InArgument(s:String)' />  
  <z:SchemaType.SchemaProperty Name='Response' Type='OutArgument(s:String)' />  
</z:SchemaType.Members>  
  <Sequence>  
    <my:WriteLine Text='[Text]' />  
    <my:ReadLine BookmarkName='r1' Result='[Response]' />  
  </Sequence>  
</Activity>  

Tevékenységkörnyezet

Ez ActivityContext a tevékenység szerzője felülete a munkafolyamat-futtatókörnyezethez, és hozzáférést biztosít a futtatókörnyezet számos funkciójához. Az alábbi példában egy olyan tevékenység van definiálva, amely a végrehajtási környezettel hoz létre egy könyvjelzőt (ez a mechanizmus lehetővé teszi, hogy egy tevékenység regisztráljon egy folytatási pontot a végrehajtásban, amelyet egy gazdagép folytathat, amely adatokat ad át a tevékenységnek).

public sealed class ReadLine : NativeActivity<string>
{
    [RequiredArgument]
    public InArgument<string> BookmarkName { get; set; }

    protected override void Execute(NativeActivityContext context)
    {
        // Create a Bookmark and wait for it to be resumed.
        context.CreateBookmark(BookmarkName.Get(context),
            new BookmarkCallback(OnResumeBookmark));
    }

    // NativeActivity derived activities that do asynchronous operations by calling
    // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext
    // must override the CanInduceIdle property and return true.
    protected override bool CanInduceIdle
    {
        get { return true; }
    }

    public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
    {
        // When the Bookmark is resumed, assign its value to
        // the Result argument.
        Result.Set(context, (string)obj);
    }

Tevékenység életciklusa

Egy tevékenység egy példánya az Executing állapotban indul el. Kivéve, ha kivételeket tapasztal, az ebben az állapotban marad mindaddig, amíg az összes gyermektevékenység befejeződik, és az egyéb függőben lévő munkák (Bookmark például objektumok) befejeződnek, és ekkor átvált az Closed állapotra. A tevékenységpéldány szülője kérheti a gyermek lemondását; ha a gyermek lemondható, akkor az állapotban fejeződik be Canceled . Ha a végrehajtás során kivétel történik, a futtatókörnyezet állapotba helyezi a Faulted tevékenységet, és propagálja a kivételt a tevékenységek szülőláncában. Egy tevékenység három befejező állapota a következő:

  • Lezárva: A tevékenység befejezte a munkáját, és kilépett.

  • Megszakítva: A tevékenység kecsesen felhagyott a munkájával, és kilépett. Az állapot megadásakor a rendszer nem állítja vissza explicit módon a munkát.

  • Hibás: A tevékenység hibát észlelt, és a munka befejezése nélkül lépett ki.

A tevékenységek megmaradnak az Executing állapotban, amikor azok megmaradnak vagy ki vannak ürítve.