Асинхронное программирование, 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] + " "); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д