Какие достоинства у async и await? - C#
Формулировка задачи:
Пытаюсь разобраться с данными ключевыми словами и уже голова идет кругом
Посмотрел и видео много, и статей, но все равно не совсем ясно. Я понял, что это все разворачивается в автогенерируемый код с асинкстейт машиной, но зачем нам все это? Ведь это не упрощение никакое, о чем твердят в различных ресурсах, а наоборот..
Да, метод OperationAsync теперь запускается асинхронно, но без async и await он бы тоже асинхронно запустился бы. Или нет?
И с возвращаемыми значениями все удобно работает.
Если не сложно, пожалуйста, пару простых(чем проще, тем лучше) примеров где реально нужны эти async await, и где реально они упрощают нам жизнь. А то все говорят: "О наконец! Теперь без особых проблем элементарно можно создавать асинхронные методы, не то что раньше". Но по факту все равно все работает через таски.. Хочется тоже разделить радость с людьми
Заранее спасибо!
static void Main() { MyClass my = new MyClass(); my.OperationAsync(); my.Operation(); Console.ReadKey(); } class MyClass { public void Operation() { Console.WriteLine("Start ID: " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(5000); Console.WriteLine("End ID: " + Thread.CurrentThread.ManagedThreadId); } public async void OperationAsync() { Task task = new Task(Operation); task.Start(); await task; } }
static void Main() { Console.WriteLine("2 + 5 = " + SumAsync(2, 5)); Console.ReadKey(); } static int SumAsync(int a, int b) { Task<int> task = Task.Factory.StartNew(Sum, new AB() { A = a, B = b }); return task.Result; } static int Sum(object abO) { AB ab = (AB)abO; Thread.Sleep(2000); return ab.A + ab.B; } struct AB { public int A { get; set; } public int B { get; set; } }
Решение задачи: «Какие достоинства у async и await?»
textual
Листинг программы
async void OnButtonClicked(object sender, EventArgs e) { var button = sender as Button; button.Enabled = false; button.Text = "Работаем..."; progressBar.Value = 0; progressBar.Visible = true; await PerformLongOperatio(); progressBar.Visible = false; button.Text = "Запустить"; button.Enabled = true; } async Task PerformLongOperation() { for (int i = 0; i < 100; i++) { await Task.Delay(100); progressBar.PerformStep(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д