Спасибо! Это работает; как ни странно, рабочий процесс по-прежнему блокируется до завершения Track (). (Он вызывает методы Begin / End.) Похоже, мне нужно реализовать очередь, чтобы получить желаемое поведение. (Не отвлекайте от вашего правильного ответа!)

аюсь реализовать собственный TrackingParticipant для WF 4. Я могу написать метод Track, но моя реализация будет медленной.

Как я могу реализовать переопределения Begin / EndTrack, используя параллельную библиотеку задач (TPL) .NET 4.0? Я смотрел наTPL и традиционное .NET асинхронное программирование но я не уверен, как применить это здесь.

Обратите внимание, что TrackingParticipant является частью .NET и имеет классический асинхронный шаблон, предопределенный с помощью виртуальных методов.

public class MyTrackingParticipant : TrackingParticipant
{
    protected override IAsyncResult BeginTrack(
        TrackingRecord record, TimeSpan timeout,
        AsyncCallback callback, object state)
    {
        // ?
    }

    protected override void EndTrack(IAsyncResult result)
    {
        // ?
    }

    protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        // synchronous code to be called
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос