Музыкальные стулья: как асинхронная задача может отменить синхронную в C#?C#

Место общения программистов C#
Ответить
Anonymous
 Музыкальные стулья: как асинхронная задача может отменить синхронную в C#?

Сообщение Anonymous »

Я пишу программу на C# для приложения Windows Forms в .NET Framework.
Моя программа играет на музыкальных стульях.
Вот — это метод, который выполняется синхронно и занимает около 60 секунд, назовем его DanceMoves().
Этот метод должен выполняться в цикле до тех пор, пока условие hasMusic не станет ложным.
Условие hasMusic изменяется в другой задаче асинхронно.
Точный момент, когда это условие выполняется, должен не только разорвать цикл, но и синхронный Метод DanceMoves() должен быть немедленно прерван, чтобы мы могли запустить метод GrabChair().
Поэтому, если это произойдет по прошествии 25 секунд, он не должен завершать последние 35 секунд DanceMoves(), его следует немедленно прервать и запустить метод GrabChair().
Я не могу изменить синхронный метод DanceMoves();
Как мне этого добиться?
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MusicalChairs
{
public partial class Form1 : Form
{
public Form1()
{
// Do not modify this method
InitializeComponent();
}

private bool hasMusic = true;
private Random random = new Random();
private async void StartMusicButton_Click(object sender, EventArgs e)
{
hasMusic = true;
ChangeMusicStatusAsync();
while (hasMusic)
{
DanceMoves();
}
GrabChair();
}

private async Task ChangeMusicStatusAsync()
{
// Do not modify this method
await Task.Delay(random.Next(1, 11) * 20000);
hasMusic = false;
}

private void DanceMoves()
{
// Do not modify this method
Thread.Sleep(60000);
}

private void GrabChair()
{
// Do not modify this method
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/782 ... s-one-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»