Асинхронное программирование, Async и Await - C#

Узнай цену своей работы

Формулировка задачи:

нужно сделать программу, которая в отдельном методе заполняет массив случайными числами. Пока массив заполняется, вывести в консоль какой-то текст, а после - сам массив. Учить только начал, не могу разобраться с функцией await, сколько в интернете не читаю, никак не доходит. В общем прошу помочь исправить код и желательно с объяснениями.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace oopLab5
{
    class Program
    {
        public static async void doSomething()
        {
            RandomNumbers rn = new RandomNumbers();
 
            List<int> list = new List<int>();
            list = rn.setArray();
 
            Console.WriteLine("А пока массив заполняется рандомными числами вы можете задуматься о следующем:"); 
            Console.WriteLine("Асинхронность необходима для действий, которые потенциально являются блокирующими, например, когда приложение получает доступ к вебу. Доступ к веб-ресурсам может быть медленным или осуществляться с задержками. Если такая активность заблокирована внутри синхронного процесса, все приложение должно ждать ответа. В асинхронном процессе, приложение может продолжить выполнять другую работу, которая не зависит от веб-ресурса, пока потенциально блокирующая задача завершится.");
 
            await list; // ошибка "Cannot await List<int>"
 
            Console.WriteLine("Массив заполнен: ");
            
            for(int i = 0; i < list.Count; i++)
            {
                Console.Write(list[i] + " ");
            }
        }
 
        static void Main()
        {
            doSomething();
            Console.ReadLine();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace oopLab5
{
    public class RandomNumbers
    {
        public List<int> setArray()
        {
            Console.Write("Введите количество чисел в массиве: ");
            int numbersCount = int.Parse(Console.ReadLine());
 
            List<int> list = new List<int>();
 
            Random rand = new Random();
 
            for (int i = 0; i < numbersCount; i++)
            { 
                list.Add(rand.Next(0, 100));
            }
 
            return list;
        }
    }
}
Собственно вот здесь ошибка:
await list; // ошибка "Cannot await List<int>"
и почему он не может дождаться моего списка не пойму.

Решение задачи: «Асинхронное программирование, Async и Await»

textual
Листинг программы
            var fillArray = Task.Run(() => setArray());
 
            Console.WriteLine("А пока массив заполняется рандомными числами вы можете задуматься о следующем:"); 
            Console.WriteLine("Асинхронность необходима для действий, которые потенциально являются блокирующими, например, когда приложение получает доступ к вебу. Доступ к веб-ресурсам может быть медленным или осуществляться с задержками. Если такая активность заблокирована внутри синхронного процесса, все приложение должно ждать ответа. В асинхронном процессе, приложение может продолжить выполнять другую работу, которая не зависит от веб-ресурса, пока потенциально блокирующая задача завершится.");
 
            var list = await fillArray;
 
            Console.WriteLine("Массив заполнен: ");
            
            for(int i = 0; i < list.Count; i++)
            {
                Console.Write(list[i] + " ");
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.2 из 5