Connect with us

.NET

C#: Como cancelar uma tarefa demorada com cancellation tokens

No C#, as tarefas podem ser canceladas usando tokens de cancelamento. Os tokens de cancelamento são objetos que podem ser usados para sinalizar que uma tarefa deve ser cancelada.

Para cancelar uma tarefa, você pode chamar o método Cancel() do token de cancelamento. Quando o método Cancel() é chamado, a task entra em um estado de cancelamento.

As tarefas em um estado de cancelamento devem limpar quaisquer recursos que elas tenham alocado e retornar a um estado consistente.

Você pode passar tokens de cancelamento para tarefas de várias maneiras. Você pode passá-los como argumentos de método, como propriedades ou como objetos compartilhados.

O uso de tokens de cancelamento pode ajudar a garantir que as tarefas demoradas sejam encerradas adequadamente quando necessário.

Published

on

Um token de cancelamento é um objeto que permite que a colaboração interrompa operações assíncronas de longa duração. Eles são usados ​​para evitar que as operações consumam recursos indefinidamente, mesmo que eles não sejam mais necessários.

Para usar um token de cancelamento, primeiro você deve criar um objeto CancellationTokenSource. Este objeto fornece um token de cancelamento que você pode passar para a operação que deseja cancelar.

A operação que recebe o token de cancelamento pode então verificar periodicamente o status do token. Se o status for IsCancellationRequested, a operação deverá interromper seu trabalho e retornar.

A desmarcação é uma ferramenta importante para programação assíncrona. Eles podem ajudar a garantir que suas operações consumam recursos de forma eficiente e parem quando necessário.

Aqui estão alguns exemplos de como usar tokens de cancelamento:

  • Se o usuário clicar no botão Cancelar, a operação de download do arquivo será interrompida.
  • Se o limite de tempo for atingido, a operação de processamento de dados será interrompida.
  • Se a conexão for perdida, as operações de comunicação com o servidor remoto serão interrompidas.

A desmarcação é uma parte importante da programação assíncrona. Eles fornecem uma maneira segura e eficiente de interromper operações assíncronas longas.

using System;
using System.Threading;
using System.Threading.Tasks;

namespace CancellationTokenExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Cria um token de cancelamento
            var cancellationTokenSource = new CancellationTokenSource();
            var cancellationToken = cancellationTokenSource.Token;

            // Cria uma task demorada
            Task.Run(() =>
            {
                // Verifica o status do token de cancelamento periodicamente
                while (!cancellationToken.IsCancellationRequested)
                {
                    // Faz algo demorado
                    Thread.Sleep(1000);
                }

                // Se o token de cancelamento foi solicitado, sai da task
                Console.WriteLine("Cancelado!");
            });

            // Cancela a task após 3 segundos
            Thread.Sleep(3000);
            cancellationTokenSource.Cancel();

            // Aguarda a task terminar
            Task.WaitAll();

            Console.WriteLine("Pronto!");
        }
    }
}

Você deve estar se perguntando: Por que cancelar uma tarefa se ela ainda não foi concluída?

É importante cancelar uma tarefa mesmo que ela ainda não tenha sido concluída. Isso porque, caso a tarefa não seja cancelada, ela continuará consumindo recursos indefinidamente.

No exemplo anterior, a tarefa demorada era realizar algo demorado, como baixar um arquivo grande ou processar grandes quantidades de dados. Se uma tarefa não for cancelada, ela continuará consumindo CPU, memória e recursos de rede mesmo que não seja mais necessária.

Cancelar uma tarefa também pode ajudar a evitar que ela cause danos. Por exemplo, se uma tarefa estiver fazendo alterações em um banco de dados, cancelar a tarefa impedirá que as alterações sejam feitas por engano.

Em alguns casos, você pode saber se uma tarefa foi concluída com êxito antes de cancelá-la. Por exemplo, se uma tarefa estiver baixando um arquivo, você poderá verificar o tamanho do arquivo baixado para ver se ele foi concluído.

Contudo, em muitos casos é impossível saber se uma tarefa foi concluída com sucesso até que seja cancelada. Por exemplo, se a tarefa estiver processando uma grande quantidade de dados, não será possível verificar se o processamento foi concluído.

De modo geral, é melhor cancelar uma tarefa mesmo que ela ainda não tenha sido concluída.

Digamos que eu crie um método get que chame uma tarefa que dura 15 minutos. Você deseja cancelar a qualquer momento chamando um método get. Como será esse método get?

Para cancelar uma tarefa a qualquer momento, você pode passar um token de cancelamento para o método get. O método get pode então verificar periodicamente o status do token de cancelamento. O método get pode cancelar a tarefa se um token de cancelamento for solicitado.

Aqui está um exemplo de como cancelar uma tarefa a qualquer momento e chamá-la usando um botão:

// Cria um token de cancelamento
var cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = cancellationTokenSource.Token;

// Cria uma task demorada
Task.Run(() =>
{
    // Verifica o status do token de cancelamento periodicamente
    while (!cancellationToken.IsCancellationRequested)
    {
        // Faz algo demorado
        Thread.Sleep(1000);
    }

    // Se o token de cancelamento foi solicitado, sai da task
    Console.WriteLine("Cancelado!");
});

// Invoca o método get
Task.Run(() =>
{
    // Passa o token de cancelamento para o método get
    GetAsync(cancellationToken);
});

// Aguarda a task terminar
Task.WaitAll();

// Cancela a task
Button.Click += (sender, e) =>
{
    cancellationTokenSource.Cancel();
};

// Método get que recebe o token de cancelamento
static async Task GetAsync(CancellationToken cancellationToken)
{
    // Verifica o status do token de cancelamento periodicamente
    while (!cancellationToken.IsCancellationRequested)
    {
        // Faz algo demorado
        Thread.Sleep(1000);
    }

    // Se o token de cancelamento foi solicitado, sai da task
    Console.WriteLine("Cancelado!");
}

Neste exemplo, criamos um token de cancelamento e passamos o token para o método get. O método get verifica periodicamente o status do token de cancelamento. Se um token de cancelamento for solicitado, o método get será encerrado.

Para cancelar uma tarefa, você chama o método Cancel() do token de cancelamento.

Aqui está um exemplo de como cancelar uma tarefa:

// Cancela a task
cancellationTokenSource.Cancel();

Ao executar este código, teremos a saída:

...
Cancelado!
Pronto!
Continue Reading
Click to comment

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

.NET

Microsoft está oferecendo cursos gratuitos com certificado!

Published

on

🚨🥁 A Microsoft está oferecendo cursos GRATUITOS com certificados. Não esqueça de compartilhar e ajudar alguém 👍🏼🚀😀

(Lembre-se, é um certificado, não uma certificação)! 😀

🌐 Microsoft Azure Fundamentals

  • AZ-900
  • 24-Hour
  • Link: https://lnkd.in/d6Xnvn_a

🌐 Microsoft Azure Administrator

  • AZ-104
  • 96-Hour
  • Link: https://lnkd.in/dyYZaDqH

🌐 Developing Solutions for Microsoft Azure

  • AZ-204
  • 120-Hour
  • Course Link: https://lnkd.in/daGp_ZqN

🌐 Designing Microsoft Azure Infrastructure Solutions

  • AZ-305
  • 96-Hour
  • Link: https://lnkd.in/d3bCnx2t

🌐 Designing and Implementing Microsoft DevOps solutions

  • Course AZ-400
  • 96-Hour Course
  • Course Link: https://lnkd.in/dGej85sS

🌐 Microsoft Azure Data Fundamentals

  • Course DP-900
  • 24-Hour Course
  • Course Link: https://lnkd.in/d2t4Jz6i

🌐 Microsoft Azure Al Fundamentals

  • Course Al-900
  • 24-Hour Course
  • Course Link https://lnkd.in/d8DEgKiJ

🌐Designing and Implementing a Microsoft Azure Al Solution

  • Course Al-102
  • 96-Hour Course
  • Course Link: https://lnkd.in/d_QBZtHa

🌐 Develop Generative Al Solutions with Azure OpenAl Service

  • Course Al-050
  • 24-Hour Course
  • Course Link: https://lnkd.in/ddf28zBD

🌐 Microsoft Security, Compliance, and Identity Fundamentals

  • Course SC-900
  • 24-Hour Course
  • Course Link: https://lnkd.in/dmzUN3jS

🌐 Microsoft Security Operations Analyst

  • Course SC-200
  • 96-Hour Course
  • Course Link: https://lnkd.in/dTUt7C7P

🌐 Microsoft Cybersecurity Architect

  • Course SC-100
  • 96-Hour Course
  • Course Link: https://lnkd.in/dK5Nw2Qa

🌐 Microsoft Azure Security Technologies

  • Course AZ-500
  • 96-Hour Course
  • Course Link: https://lnkd.in/dSfKTws5

🌐 Designing and Implementing Microsoft Azure Networking Solutions

  • Course AZ-700
  • 72-Hour Course
  • Link: https://lnkd.in/dEKyyz5Y

🌐 Data Engineering on Microsoft Azure

  • Course DP-203
  • 96-Hour Course
  • Link: https://lnkd.in/damz4ewp

🌐 Designing and implementing a data science solution on Azure

  • Course DP-100
  • 96-Hour Course
  • Link: https://lnkd.in/dedSYpEN

🌐 Administering Microsoft Azure SQL Solutions

  • Course DP-300
  • 96-Hour Course
  • Link: https://lnkd.in/dREpV56r

FreeCourses #microsoft #azure #cloud #Upskill #MicrosoftAzure #ITCareer #Cybersecurity #Opportunity #CareerDevelopment #LearningResources #ShareKnowledge #free #certification #certificacao

Continue Reading

.NET

O .NET 8: Descubra as Incríveis Novidades do .NET 8 que Vão Revolucionar Seu Desenvolvimento!

O .NET 8 oferece uma gama de novos recursos e melhorias que tornam a plataforma ainda mais robusta e eficiente. Com aprimoramentos no C#, suporte avançado para desenvolvimento full-stack com Blazor, a introdução do .NET MAUI, melhorias de performance, atualizações no ASP.NET Core e suporte ao HTTP/3, o .NET 8 está bem equipado para enfrentar as demandas de desenvolvimento moderno. Desenvolvedores podem esperar uma experiência mais fluida, rápida e integrada, seja na criação de aplicações web, desktop ou mobile.

Published

on

O .NET 8, lançado pela Microsoft, traz uma série de inovações e melhorias que visam aumentar a produtividade dos desenvolvedores, melhorar a performance das aplicações e expandir a versatilidade da plataforma. A seguir, vamos explorar algumas das principais novidades e fornecer exemplos práticos de como essas mudanças podem ser aplicadas.

Principais Novidades do .NET 8

1. Aprimoramentos no C# 12

O .NET 8 inclui a versão mais recente do C#, o C# 12, que apresenta várias melhorias e novos recursos. Dentre os destaques, temos:

  • Primary Constructors para Structs e Classes: Simplifica a definição de construtores para structs e classes.
  • Default Interpolated Strings: Torna a interpolação de strings mais flexível e poderosa.
public struct Pessoa(string nome, int idade);
var pessoa = new Pessoa("Alice", 30);
Console.WriteLine($"Nome: {pessoa.nome}, Idade: {pessoa.idade}");

2. Blazor Full-Stack

O Blazor, a tecnologia de construção de interfaces web interativas utilizando C#, agora suporta full-stack development. Isso significa que os desenvolvedores podem criar tanto o front-end quanto o back-end usando Blazor, proporcionando uma experiência de desenvolvimento mais coesa.

@page "/contador"
@code {
    private int contador = 0;
    private void IncrementarContador() => contador++;
}
<button @onclick="IncrementarContador">Clique me: @contador</button>

3. MAUI (Multi-platform App UI)

O .NET MAUI é a evolução do Xamarin.Forms e permite a criação de aplicações multi-plataforma (iOS, Android, Windows, macOS) com um único código-base.

public class App : Application
{
    public App()
    {
        MainPage = new ContentPage
        {
            Content = new StackLayout
            {
                Children = {
                    new Label { Text = "Bem-vindo ao .NET MAUI!" }
                }
            }
        };
    }
}

4. Melhorias de Performance

O .NET 8 continua a tradição de aprimorar a performance da plataforma. Algumas melhorias incluem otimizações no JIT (Just-In-Time) compiler, melhorias na alocação de memória e novos recursos no runtime que reduzem o overhead das aplicações.

5. Atualizações no ASP.NET Core

O ASP.NET Core, framework para construção de aplicações web e APIs, recebeu várias melhorias no .NET 8:

  • Minimal APIs com mais funcionalidades: Inclui mais suporte para autenticação e autorização, e melhores ferramentas de depuração.
  • Novo sistema de autenticação: Simplifica a configuração de autenticação em aplicações web.
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/saudacao", () => "Olá, Mundo!");

app.Run();

6. Suporte ao HTTP/3

O .NET 8 traz suporte aprimorado ao HTTP/3, permitindo a construção de aplicações que se beneficiam das melhorias de performance e segurança do novo protocolo.

7. Hot Reload

A funcionalidade de Hot Reload permite que os desenvolvedores façam mudanças no código durante a execução da aplicação, e essas mudanças são refletidas instantaneamente, sem a necessidade de recompilar ou reiniciar a aplicação.

Exemplo:

Alterações em uma aplicação Blazor são aplicadas instantaneamente durante a execução:

<h1>Hello, world!</h1>
<p>Bem-vindo ao uso de Hot Reload no Blazor!</p>

Conclusão

O .NET 8 oferece uma gama de novos recursos e melhorias que tornam a plataforma ainda mais robusta e eficiente. Com aprimoramentos no C#, suporte avançado para desenvolvimento full-stack com Blazor, a introdução do .NET MAUI, melhorias de performance, atualizações no ASP.NET Core e suporte ao HTTP/3, o .NET 8 está bem equipado para enfrentar as demandas de desenvolvimento moderno. Desenvolvedores podem esperar uma experiência mais fluida, rápida e integrada, seja na criação de aplicações web, desktop ou mobile.

Continue Reading

.NET

A Microsoft está oferecendo cursos de certificação GRATUITOS!

Published

on

A Microsoft está oferecendo cursos de certificação GRATUITOS!

Sem taxa, sem assinatura, sem necessidade de registro, basta começar a aprender. Esses cursos incluem palestras em vídeo, tutoriais e notas fáceis. Conheça os seguintes cursos gratuitos.

1. Fundamentos do Microsoft Azure
– Curso AZ-900T00
– Curso de 24 horas
– Link do curso: https://lnkd.in/dtYedpnZ

2. Desenvolvendo soluções para Microsoft Azure
– Curso AZ-204T00
– Curso de 120 horas
– Link do curso: https ://lnkd.in/dzVWhp7u

3. Administrador do Microsoft Azure
– Curso AZ-104T00
– Curso de 96 horas
– Link do curso: https://lnkd.in/djrYxCqW

4. Configurando e operando o Microsoft Azure Virtual Desktop
– Curso AZ-140
– Curso de 96 horas
– Link do curso: https://lnkd.in/dsd5CPJy

5. Projetando soluções de infraestrutura Microsoft Azure
– Curso AZ-305T00
– Curso de 96 horas
– Link do curso: https://lnkd.in/dq28keX9

7. Fundamentos de dados do Microsoft Azure
– Curso DP-900T00
– Curso de 24 horas
– Link do curso: https://lnkd.in/dmtfCKHM

8. Fundamentos de IA do Microsoft Azure
– Curso AI-900T00
– Curso de 24 horas
– Link do curso: https:// lnkd.in/drnFx6qF

9. Projetando e implementando uma solução de IA do Microsoft Azure
– Curso AI-102T00
– Curso de 96 horas
– Link do curso: https://lnkd.in/dt_rFFgK

10. Desenvolva soluções de IA generativas com o serviço Azure OpenAI
– Curso AI-050T00
– Curso de 24 horas
– Link do curso: https://lnkd.in/dKNN3mph

11. Fundamentos de segurança, conformidade e identidade da Microsoft
– Curso SC-900T00
– Curso de 24 horas
– Link do curso: https://lnkd.in/dVWxqa_E

12. Engenharia de dados no Microsoft Azure
– Curso DP-203T00
– Curso de 96 horas
– Link do curso: https://lnkd.in/duKTsYMa

13. Analista de operações de segurança da Microsoft
– Curso SC-200T00
– Curso de 96 horas
– Link do curso: https://lnkd.in/du3d55NG

14. Projetando e implementando soluções de rede Microsoft Azure
– Curso AZ-700T00
– Curso de 72 horas
– Link do curso: https://lnkd.in/dgmBzYDS

15. Projetando e implementando uma solução de ciência de dados no Azure
– Curso DP-100T01
– Curso de 96 horas
– Link do curso: https://lnkd.in/dZ8WXxYx

#Segurança #Cibernética #Microsoft #DesenvolvimentodeCarreira #SegurançadaInformação #Cursos #nuvem #az900 #azure #carreiratech #techrecruiter

Continue Reading

Trending

Copyright © 2023 CodeInsider.com.br - criado por Dallm IT