Реализация 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?Спасибо