Есть ли способ дождаться Console.ReadLineAsync и другой задачи параллельно с WaitAny()?C#

Место общения программистов C#
Anonymous
Есть ли способ дождаться Console.ReadLineAsync и другой задачи параллельно с WaitAny()?

Сообщение Anonymous »

Я работаю над игрушечным отладчиком CLI на C#/.NET. У меня есть цикл REPL, который выглядит примерно так:

Код: Выделить всё

this.backgroundTcs = new TaskCompletionSource();
bool quit = false;
while (!quit) {
Task inputTask = Console.In.ReadLineAsync();
await Task.WhenAny(inputTask, backgroundTcs.Task);
Console.WriteLine($"Status: {inputTask.Status}, {backgroundTcs.Task.Status}");
// do something with either of the tasks, depending on their IsCompleted properties
if (inputTask.IsCompletedSuccessfully) {
quit = DispatchDebuggerCommand(inputTask.Result);
}
}
Существует фоновый поток, имитирующий выполнение отлаживаемой программы. Когда этот поток достигает инструкции прерывания, он вызывает метод SetResult источника завершения backgroundTcs:

Код: Выделить всё

void OnBreakInstruction() {
backroundTcs.SetResult();  // This does get executed (from the background thread)
}
Я ожидаю, что вызов WhenAny должен возобновиться после того, как будет прочитана строка текста из стандартного ввода или завершено выполнение BackgroundTcs.Task. Я наблюдаю, что вызов SetResult выполняется, но метод WhenAny не возобновляется до тех пор, пока я не нажму клавишу .
Как мне написать код, чтобы я мог ожидать либо ввода командной строки из консоли, либо завершения задачи?

Подробнее здесь: https://stackoverflow.com/questions/798 ... rallel-wit

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