Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Windows Workflow Foundation (WF) повышает уровень абстракции для разработки интерактивных длительных приложений. Единицы работы инкапсулируются в виде задач. Действия выполняются в среде, которая предоставляет средства для управления потоками, обработки исключений, распространения ошибок, сохранения данных состояния, загрузки и выгрузки рабочих процессов выполнения из памяти, отслеживания и потока транзакций.
Архитектура действий
Действия разрабатываются как типы CLR, производные от Activity, CodeActivity, AsyncCodeActivity, или NativeActivity или их вариантов, возвращающих значение, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>, или NativeActivity<TResult>. Разработка действий, производных от Activity, позволяет пользователю собирать уже существующие действия, чтобы быстро создавать единицы работы, которые выполняются в среде рабочего процесса. CodeActivityС другой стороны, позволяет создавать логику выполнения в управляемом коде, используя CodeActivityContext в основном для доступа к аргументам действия. AsyncCodeActivity аналогично CodeActivity, за исключением того, что его можно использовать для выполнения асинхронных задач. Разработка действий, происходящих от NativeActivity, позволяет пользователям получать доступ к среде выполнения через NativeActivityContext, предоставляя функциональные возможности, такие как планирование дочерних процессов, создание закладок, инициирование выполнения асинхронных задач, регистрация транзакций и многое другое.
Действия, создаваемые на основе Activity, являются декларативными, и эти действия можно описывать в XAML. В следующем примере создается действие Prompt с использованием других действий для исполнительного тела.
<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>
Контекст действия
Это ActivityContext интерфейс автора действия для среды выполнения рабочего процесса и предоставляет доступ к богатым функциям среды выполнения. В следующем примере определяется задача, использующая контекст выполнения для создания закладки (механизм, позволяющий задаче зарегистрировать точку продолжения в своем выполнении, которую может возобновить принимающая сторона, передавая данные в задачу).
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);
}
Жизненный цикл активности
Экземпляр действия начинается в Executing состоянии. Если исключения не обнаружены, состояние остается таким до тех пор, пока все дочерние действия не будут завершены и вся остальная незавершенная работа (например, объекты Bookmark) завершена, после чего оно переходит в состояние Closed. Родительский элемент экземпляра действия может запросить отмену дочернего элемента; если дочерний элемент может быть отменен, он завершается в Canceled состоянии. Если во время выполнения выбрасывается исключение, среда выполнения помещает действие в определенное состояние и распространяет исключение вверх по родительской цепочке действий. Ниже приведены три состояния завершения действия:
Закрыто: Деятельность завершила свою работу и вышла.
Отменено: Действие изящно прекратило свою деятельность и завершило работу. Работа не откатывается явным образом при входе в это состояние.
Ошибка: Во время выполнения действия произошла ошибка и завершилось, не выполнив работу.
Действия остаются в состоянии Executing, когда они сохраняются или разгружаются.