Здравствуйте! Я реализовал данную форму. При клике на кнопку "Включить компьютер" у меня срабатывают следующие функции:
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 не прерывается при нажатии на вторую кнопку.

ButtonFlashAsyncне является асинхронным. Асинхронным метод делает неasync, аawait. – aepot Mar 23 '23 at 20:29await Task.Delayвот вы токен отмены передали в метод, но его не используете никак. Где хоть один await в методе? Метод синхронный. Вы не сделали как я сказал. – aepot Mar 26 '23 at 21:37// ... ex.Messageзамените наMessageBox.Show(ex.Message);, а то не смешно даже, ловите исключение, но никак себе не даете понять, что поймали. – aepot Mar 26 '23 at 21:40async, значит в нём обязательно должен быть как минимум 1await. Просто как правило выучите себе. – aepot Mar 26 '23 at 21:46