Console.Writeline пишет в консоль только в некоторых случаях при использовании async await - PullRequest
0 голосов
/ 05 марта 2019

Итак, у меня супер простое приложение, но, когда я его тестирую, оно только пишет в консоль из метода DoWork ().Я не уверен, почему это так, но я уверен, что это связано с тем, что это асинхронный код.Есть идеи, почему он пишет только из метода DoWork ()?

class Program
{
    static void Main(string[] args)
    {
        MainAsync().Wait();
        System.Threading.Thread.Sleep(50000);
    }

    static async Task MainAsync()
    {
        Console.WriteLine("Hello World!");

        for (int i = 0; i < 300; i++)
        {
            List<Task> myWork = new List<Task>();
            myWork.Add(DoWork(i));
            if (myWork.Count == 50)
            {
                await Task.WhenAll(myWork);
                Console.WriteLine("before delay");
                await Task.Delay(1000);
                Console.WriteLine("after delay");
                myWork.Clear();
                Console.WriteLine("List cleared.");
            }
        }


    }

    public static async Task DoWork(int i)
    {
        await Task.Delay(0);
        Console.WriteLine("Run: " + i);
    }
}

1 Ответ

0 голосов
/ 05 марта 2019

Вы создаете новый список для каждой итерации цикла ... в нем будет только одна вещь.

Объявите список вне цикла.

Изменение:

    for (int i = 0; i < 300; i++)
    {
        List<Task> myWork = new List<Task>();

Кому:

    List<Task> myWork = new List<Task>();
    for (int i = 0; i < 300; i++)
    {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...