Я пытаюсь создать интерфейс для игры. Игра длится 1 минуту. Метод GetStop останавливается после 60-секундной игры. Метод play запускает игру, а метод quit завершает игру. Теперь в идеале я хочу, чтобы когда я выходил из игры через 30 секунд, таймер должен сбрасываться, а при нажатии кнопки «Воспроизвести» таймер снова должен работать в течение 1 минуты. Чтобы следующая игра шла 1 минуту. Если я снова нажму кнопку «Выход», таймер должен быть сброшен для следующей игры.
Однако, похоже, в моем коде есть определенная проблема. Всякий раз, когда я выполняю метод quit, таймер, кажется, сохраняется в этом состоянии. Итак, если я выйду из гонки через 30 секунд, следующая гонка продлится всего 30 секунд. Если я выйду из гонки через 50 секунд, следующая гонка продлится всего 10 секунд. В идеале таймер должен сбрасываться, но не сбрасывается.
У меня нет идей здесь. Может ли кто-нибудь дать несколько предложений ??
private async Task GetStop(CancellationToken token)
{
await Task.Run(async () =>
{
token.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(60), token);
token.ThrowIfCancellationRequested();
if (!token.IsCancellationRequested)
{
sendMessage((byte)ACMessage.AC_ESCAPE);
}
}, token);
}
public async void Play()
{
sendMessage((byte)ACMessage.AC_START_RACE);
_cts.Cancel();
if (_cts != null)
{
_cts.Dispose();
_cts = null;
}
_cts = new CancellationTokenSource();
await GetStop(_cts.Token);
}
public void Quit()
{
_cts.Cancel();
if (_cts != null)
{
_cts.Dispose();
_cts = null;
}
//
}
Task
останавливает выполнение процесса. Это неправда. Только сама задача в качестве оболочки для процесса перестанет ждать ее, а остальная часть вашего кода продолжит работу, включая процесс «внутри» задачи. - person Silvermind   schedule 02.07.2018