

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# AWS Flow Framework Conceitos básicos: troca de dados entre atividades e fluxos de trabalho
<a name="awsflow-basics-data-exchange-activities-workflows"></a>

Ao chamar um método de cliente de atividade assíncrono, ele retorna imediatamente um objeto *Promessa* (também conhecido como um *Future*), que representa o valor de retorno do método de atividade. Inicialmente, a Promessa está em um estado não pronto e o valor de retorno está indefinido. Após a conclusão da tarefa do método de atividade e seu retorno, a estrutura ordena o valor de retorno em toda a rede para o operador do fluxo de trabalho, o que atribuí um valor para a Promessa e coloca o objeto em um estado pronto.

Mesmo que um método de atividade não possua valor de retorno, ainda é possível usar a Promessa para executar a execução do fluxo de trabalho. Se você repassar uma promessa retornada para um método de cliente de atividades ou para um método de fluxo de trabalho assíncrono, ela adia a execução até que o objeto esteja pronto.

Se você enviar uma ou mais Promessas para um método de cliente de atividade, a estrutura enfileira a tarefa mas adia o agendamento até que os objetos estejam prontos. Em seguida ela extrai os dados de cada Promessa e ordena-os pela internet para o operador de atividade, que envia-os para o método de atividade como um tipo padrão.

**nota**  
Se você precisar transferir grandes quantidades de dados entre os operadores de fluxo de trabalho e de atividade, a abordagem preferencial é armazenar os dados em um local conveniente e enviar somente as informações de recuperação. Por exemplo, você pode armazenar os dados em um bucket do Amazon S3 e passar o URL associado.

## A Promessa <T> Type
<a name="awsflow-basics-data-exchange-activities-workflows.promise"></a>

O tipo `Promise<T>` é de certa forma semelhante ao tipo `Future<T>` em Java. Ambos os tipos representam os valores retornados por métodos assíncronos e estão inicialmente indefinidos. Acesse o valor de um objeto ao chamar o seu método `get`. Além disso, os dois tipos comportam-se de forma diferente.
+ `Future<T>` é uma construção de sincronização que permite que um aplicativo espere a conclusão de um método assíncrono. Se você chamar `get` e o objeto não estiver pronto, ele é bloqueia até que o objeto esteja pronto.
+ Com `Promise<T>`, a sincronização é gerenciada pela estrutura. Se você chamar `get` e o objeto não estiver pronto, `get` gerará uma exceção.

A finalidade principal da `Promise<T>` é gerenciar o fluxo de dados entre as atividades. Isso garante que uma atividade não seja executada até que os dados de entrada sejam válidos. Em muitos casos, os operadores de fluxo de trabalho não precisam acessar os objetos `Promise<T>` diretamente, eles apenas enviam os objetos de uma atividade para outra e deixam que a estrutura e os operadores de atividade cuidem dos detalhes. Para acessar o valor de um objeto `Promise<T>` em um operador de fluxo de trabalho, você deve ter certeza que o objeto está pronto antes de chamar seu método `get`.
+ A abordagem preferencial é enviar o objeto `Promise<T>` para um método de fluxo de trabalho assíncrono e processar o valor ali. Um método assíncrono adia a execução até que todos os objetos `Promise<T>` de entrada estejam prontos, o que garante que os valores possam ser acessados com segurança.
+ `Promise<T>` expõe um método `isReady` que retorna `true` se o objeto estiver pronto. Usar `isReady` para consultar um objeto `Promise<T>` não é recomendado, mas `isReady` é útil em certas ocasiões.

O AWS Flow Framework for Java também inclui um `Settable<T>` tipo, que é derivado `Promise<T>` e tem um comportamento semelhante. A diferença é que a estrutura geralmente define o valor de um `Promise<T>` objeto e o trabalhador do fluxo de trabalho é responsável por definir o valor de `Settable<T>` a.

Existem ocasiões onde um operador de fluxo de trabalho precisa criar um objeto `Promise<T>` e definir o seu valor. Por exemplo, um método assíncrono que retorna um objeto `Promise<T>` precisa criar um valor de retorno.
+ Para criar um objeto que representa um valor digitado, chame o método `Promise.asPromise` estático, que cria um objeto `Promise<T>` do tipo adequado, define o seu valor e coloca-o em estado pronto.
+ Para criar um objeto `Promise<Void>`, chame o método `Promise.Void` estático.

**nota**  
`Promise<T>` pode representar qualquer tipo válido. No entanto, se os dados devem ser ordenados na internet, o tipo deve ser compatível com o conversor de dados. Consulte a próxima seção para obter detalhes.

## Conversores de dados e ordenação
<a name="awsflow-basics-data-exchange-activities-workflows.data"></a>

Eles AWS Flow Framework organizam dados pela Internet usando um conversor de dados. Por padrão, a estrutura usa um conversor de dados que é baseado no [processador de Jackson JSON](https://github.com/codehaus/jackson). Contudo, esse conversor tem algumas limitações. Por exemplo, ele não pode ordenar mapas que não utilizam strings como chaves. Se o conversor padrão não for suficiente para o seu aplicativo, você pode implementar um conversor de dados personalizado. Para obter mais detalhes, consulte [DataConverters](dataconverters.md).