Implementando AsyncCodeActivities (usando C # async / await)
Há muito tempo estou escrevendo classes AsyncCodeActivity personalizadas usando o seguinte modelo:
public sealed class MyActivity : AsyncCodeActivity<T>
{
protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
{
var task = new Task<T>(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<T>;
if (task.Exception != null)
{
// Error handling. Rethrow? Cancel?
}
return task.Result;
}
private T Execute(object state)
{
// Logic here
return default(T);
}
}
Eu tenho algumas perguntas sobre isso:
Qual é o caminho certo para lidar com exceções? Retornando? Definir o contexto como cancelado?Existe uma maneira elegante de escrevê-lo com a sintaxe async / await disponível agora?obrigado