Отменить выполнение асинхронной функции C#

Рейтинг: 0Ответов: 0Опубликовано: 23.03.2023

введите сюда описание изображения

Здравствуйте! Я реализовал данную форму. При клике на кнопку "Включить компьютер" у меня срабатывают следующие функции:

private CancellationTokenSource _cts;
private async void button1_Click(object sender, EventArgs e)
    {
        instanceClass1.temperature = 19;
        label2.Text = "Включен";
        label4.Text = "Температура: " + instanceClass1.temperature + " °C";
        label5.Text = "Мощность: 700 Ватт в час";
        label7.Text = "выключена";
        button1.Text = "Компьютер в работе";
        if (_cts != null)
            return;
        try
        {
            using (_cts = new CancellationTokenSource())
            {
                await ButtonFlashAsync(_cts.Token);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        _cts = null;

    }

    private async Task ButtonFlashAsync(CancellationToken token)
    {
        for (int i = 20; instanceClass1.temperature < 65; i++)
        {
            if (instanceClass1.temperature <= 45)
            {
                label4.Text = "Температура: " + instanceClass1.temperature + " °C";
                instanceClass1.temperature++;
            }
            await Task.Delay(1000, token);
            
        }
    }

Такой вопрос, как отменить асинхронную функцию при клике на вторую кнопку?

  private void button2_Click(object sender, EventArgs e)
    {
        
        label4.Text = "Температура: нет данных";
        label5.Text = "Мощность: нет данных";
        _cts?.Cancel();
    }

Мне дали ответ про токен, однако ButtonFlashAsync не прерывается при нажатии на вторую кнопку.

Ответы

Ответов пока нет.