Welington Pereira
Desenvolvedor Full Stack & Consultor
Especialista em linguagens de programação e banco de dados. Compartilhando dicas de programação práticas, tutoriais e soluções para o dia a dia do desenvolvedor.
Desenvolvedor Full Stack & Consultor
Especialista em linguagens de programação e banco de dados. Compartilhando dicas de programação práticas, tutoriais e soluções para o dia a dia do desenvolvedor.
Com o controle DataGridView, você pode especificar informações de estilo para alternar linhas. Isso permite usar as características de estilo como cor e fonte , além da cor da tela de fundo, para diferenciar as linhas alternadas.
Os estilos usando as propriedades RowsDefaultCellStyle e AlternatingRowsDefaultCellStyle substituem os estilos especificados nas propriedades do DataGridView,
dgvLog.AlternatingRowsDefaultCellStyle.BackColor = Color.LightYellow;
dgvLog.AlternatingRowsDefaultCellStyle.ForeColor = Color.Maroon;
Comunicação síncrona refere-se ao contato imediato entre o emissor (quem envia a mensagem) e o receptor (quem recebe a mensagem), a comunicação assíncrona é atemporal.
Na comunicação assíncrona o emissor envia a mensagem, mas não necessariamente o receptor irá recebê-la imediatamente.
Imaginemos que um emissor está a enviar uma mensagem de texto através de um tubo e que a mensagem é enviada recorrendo a bolas, cada bola com uma letra. Quando as bolas chegam ao receptor, a mensagem tem que ser remontada, ou seja, têm que se colocar as bolas pela ordem correta, para se voltar a ter a mensagem.
Em uma comunicação síncrona o emissor e receptor são sincronizados pelo mesmo relógio, o receptor recebe de modo contínuo (mesmo quando nenhum bit é transmitido) os dados em compasso em que o emissor as remete.

Simples exemplo em Javascript:
function foo(){
console.log("foo");
}
function bar(){
console.log("bar");
}
function baz(){
console.log("baz");
}
foo();
bar();
baz();
Essas funções serão executadas em ordem, bar não será executada até que foo tenha terminado e baz por sua vez só será executado após o término de bar, havendo assim uma sincronia.
Em uma comunicação assíncrona a sincronização é diferente, o emissor envia o fluxo de dados e periodicamente insere um elemento de sinal, comumente chamado de flag, para que seja possível distinguir aonde começa (a informação de início da transmissão é o start-bit) e acaba (a informação de fim de transmissão é o stop-bit) o bloco de dados e qual a sua posição na sequência de dados transmitidos.

Exemplo:
function foo(){
console.log("Executando algo assíncrono aqui");
}
function bar(){
setTimeout(foo, 0);
console.log("Alguma coisa por aqui");
console.log("...");
}
bar();Aqui não há a mesma sincronização que noutro exemplo, uma função não vai esperar pelo término da outra. Nesse exemplo usamos a função setTimeout para enfileirar foo que vai executar 0 ms após o loop de eventos, o loop de eventos ficará indisponível até completar sua atual pilha de execução - neste caso, o resto de bar, que inclui as duas declarações console.log. Após o término de bar o loop de eventos fica livre, e assim foo pode ser executada.
Saída:
Alguma coisa por aqui
...
Executando algo assíncrono aqui
Quando e para que devo usá-las? Grande parte do processo de tomada de decisão sobre isso envolve o senso comum, um conjunto de fatores, uma comunicação assíncrona pode ser usado quando a resposta não tenha que ser entregue urgentemente, esse tipo de comunicação é adequado para situações em que não seja necessário a entrega urgente dos dados, por outro lado, não seria apropriado usar esse tipo de comunicação se você precisa de interação imediata. Já a comunicação síncrona é ideal quando se precisa de espontaneidade, como em uma conversa em tempo real entre duas ou mais pessoas.
Tanto a comunicação síncrona, quanto a assíncrona, têm suas vantagens e desvantagens, utilizar uma ou outra vai depender da necessidade da sua aplicação.