async e await em C#
Este tutorial discutirá a programação assíncrona em C#.
Programação Assíncrona em C#
Se algum processo for bloqueado em um aplicativo síncrono, todo o aplicativo será bloqueado e deixará de responder até que o processo específico seja concluído. Podemos usar programação assíncrona neste cenário. Com a programação assíncrona, nosso aplicativo pode continuar trabalhando em segundo plano em algumas tarefas independentes até que esse processo específico seja executado. Na programação assíncrona, todo o nosso aplicativo não depende simplesmente de um único processo demorado. A programação assíncrona é usada com tarefas associadas a I/O ou CPU. O principal uso da programação assíncrona é criar uma interface de usuário responsiva que não fique presa enquanto espera por um processo vinculado a I/O ou CPU para concluir sua execução. As palavras-chave await
e async
são usadas para programação assíncrona em C#. A palavra-chave await
devolve o controle à função de chamada. A palavra-chave await
é a principal palavra-chave que permite a programação assíncrona em C#. A palavra-chave async
ativa a palavra-chave await
. Uma função que utiliza a palavra-chave await
deve ter a palavra-chave async
e retornar um objeto Task
em C#. A palavra-chave await
não pode ser usada sem a palavra-chave async
em C#. O exemplo de código a seguir demonstra a programação síncrona em C#.
using System;
using System.Threading.Tasks;
namespace async_and_await {
class Program {
public static void process1() {
for (int i = 0; i < 5; i++) {
Console.WriteLine("Process 1");
Task.Delay(100).Wait();
}
}
public static void process2() {
for (int i = 0; i < 5; i++) {
Console.WriteLine("Process 2");
Task.Delay(100).Wait();
}
}
static void Main(string[] args) {
process1();
process2();
}
}
}
Resultado:
Process 1
Process 1
Process 1
Process 1
Process 1
Process 2
Process 2
Process 2
Process 2
Process 2
No código acima, as funções process1()
e process2()
são processos independentes, mas a função process2()
deve aguardar a conclusão da função process1()
. Este código de programação síncrona simples pode ser convertido em programação assíncrona com as palavras-chave async
e await
em C#.
using System;
using System.Threading.Tasks;
namespace async_and_await {
class Program {
public static async Task process1() {
await Task.Run(() => {
for (int i = 0; i < 5; i++) {
Console.WriteLine("Process 1");
Task.Delay(100).Wait();
}
});
}
public static void process2() {
for (int i = 0; i < 5; i++) {
Console.WriteLine("Process 2");
Task.Delay(100).Wait();
}
}
static void Main(string[] args) {
process1();
process2();
}
}
}
Resultado:
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
No código acima, usamos as palavras-chave async
e await
para converter o exemplo anterior para programação assíncrona. A saída mostra claramente que a função process2()
não espera para completar a função process1()
. Na definição da função process1()
, usamos a palavra-chave async
para sugerir que esta é uma função de execução assíncrona. A palavra-chave await
na função process1()
devolve o controle à função principal, que então chama a função process2()
. O controle continua alternando entre as funções process1()
e process2()
até a conclusão da função process1()
.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn