@historydev
Острая аллергия на анимешников

Почему всё выводится в одну строку?

void RunLoader(char ch, int sleepTime)
{
    Console.WriteLine();
    for (int i = 0; i < 40; i++)
    {
        Thread.Sleep(sleepTime);
        Console.Write(ch);
    }
}

void Run1() => RunLoader('2', 10);
void Run2() => RunLoader('1', 100);

Parallel.Invoke(Run1, Run2);

22222221222222212222222122222212222222212222211111111111111111111111111111111111dotnet watch ⏳ Waiting for a file to change before restarting dotnet...


P.S:
Работает если просто вызвать, асинхронно тоже, но параллельно почему-то нет
Должно выводить две новых строки, которые заполняются цифрами 2 и 1.

P.S2:
Thread.CurrentThread.Name = "Main";

// Create a task and supply a user delegate by using a lambda expression.
Task taskA = new Task( () =>
{
    for (int i = 0; i < 40; i++)
    {
         Console.Write(1);
         Thread.Sleep(50);
    }
});

Task taskB = new Task( () =>
{
    for (int i = 0; i < 40; i++)
    {
         Console.Write(2);
         Thread.Sleep(10);
    }
});
// Start the task.
Console.WriteLine();
taskA.Start();
Console.WriteLine();
taskB.Start();
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
не, ну ты мутишь..
в коде:
Console.Write(ch);а потом
Console.WriteLine();
taskA.Start();
Console.WriteLine();
taskB.Start();

... ты определись..
в таске и бросай что то из https://habr.com/ru/articles/165597/

P.S:
Работает если просто вызвать, асинхронно тоже, но параллельно почему-то нет

и не будет по сути - консоль (системы) последовательный процесс
... если ты осмыслил остальное, то обдумай что я говорю

pps опробуй все тоже на winforms/wpf и так далее ( в разные окна вывода...
а консоль то одна...
можешь в линуксе проверить... (хоть в wsl...

ppps хотя... консолью можно управлять и координатно (в соответствии с текущей размерностью)... (тот же мой любимый far это консольная программа)..
но там точно уже не Console.WriteLine()...
или winapi или линуксовые api... как то так...
в винде far
в линуксе - mc
.. это консольные программы, оба проекта опенсорц ;)
.. есть esc-последовательности для управления курсором.. думаю для простейшего прогресс-бара хватило бы.. иначе - апи ОС, примеры выше
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Stariyded
Сетевой админ
Потому что нигде в коде нет перевода строки
Ответ написан
vabka
@vabka Куратор тега .NET
Токсичный шарпист
Потому что Console.Write(ch);
В консоли всего один курсор => после всех переносов будет всё в одну строку писаться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы