Diferença entre ITASK e IFUTURE

DAVID CANDIDO DA SILVA

DAVID CANDIDO DA SILVA Publicado 17/11/2017 


ITask e IFUTURE são interfaces disponíveis através de TTASK que se encontra na unit System.Threading…

Enquanto ITask aguarda uma chamada x.start; para iniciar o processamento em uma Thread própria, o IFuture já inicia o processamento de imediato e aceita aguardar uma resposta após o término de execução.
Exemplo ITask: (aguarda start para iniciar)

tsk := TTask.create( procedure begin
  // código a ser executado
end);
  tsk.start;
 
//pode ou não pedir para aguardar conclusão:
tsk.wait( 1000000);

Exemplo IFuture: (inicia assim que for criado)


tsk = TTask.Future<boolean>(    function:boolean    begin
    // código.....
    Result := true; // resposta para o processamento
  end);

Resposta := tsk.value; // aguarda a Thread terminal e pega o resultado

Caso precise retornar mais de um valor, há possibilidades de utilizar um RECORD:

Veja o exemplo:

TPessoa = record
  nome:string;
  idade:integer;
end;
  tsk = TTask.Future<TPessoa>( 
function:TPessoa 
begin
  // código.....
  Result.nome := 'Nome'; // resposta para o processamento
  Result.idade := 18;
end);

Recuperando o resultado:

resposta := tsk.value; // aguarda a thread terminar e pega o resultado
  if resposta.idade>18 then
    // seu código

te texto foi escrito bom base no material disponível em:
https://github.com/amarildolacerda/docs/blob/master/DelphiXFirebid.pdf



Voltar ao topo