Есть ли способ дождаться 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
Ответить

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

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

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

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

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