Реализация AsyncCodeActivities (с использованием C # async / await)

С давних пор яm написание пользовательских классов AsyncCodeActivity с использованием следующего шаблона:

public sealed class MyActivity : AsyncCodeActivity
{
    protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
    {
        var task = new Task(this.Execute, state, CancellationToken.None, TaskCreationOptions.AttachedToParent);
        task.ContinueWith(s => callback(s));
        task.Start();
        return task;
    }

    protected override T EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
    {
        var task = result as Task;
        if (task.Exception != null)
        {
            // Error handling. Rethrow? Cancel?
        }

        return task.Result;
    }

    private T Execute(object state)
    {
        // Logic here
        return default(T);
    }
}

У меня есть несколько вопросов по этому поводу:

Как правильно обрабатывать исключения? Повторное выбрасывание? Задать контекст как отмененный?Есть ли сейчас элегантный способ написать его с синтаксисом async / await?

Спасибо

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

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