Какие достоинства у async и await? - C#

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

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

Пытаюсь разобраться с данными ключевыми словами и уже голова идет кругом Посмотрел и видео много, и статей, но все равно не совсем ясно. Я понял, что это все разворачивается в автогенерируемый код с асинкстейт машиной, но зачем нам все это? Ведь это не упрощение никакое, о чем твердят в различных ресурсах, а наоборот..
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;
    }
}
Да, метод OperationAsync теперь запускается асинхронно, но без async и await он бы тоже асинхронно запустился бы. Или нет? И с возвращаемыми значениями все удобно работает.
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, и где реально они упрощают нам жизнь. А то все говорят: "О наконец! Теперь без особых проблем элементарно можно создавать асинхронные методы, не то что раньше". Но по факту все равно все работает через таски.. Хочется тоже разделить радость с людьми Заранее спасибо!

Решение задачи: «Какие достоинства у 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();
   }
}

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


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

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

15   голосов , оценка 3.933 из 5
Похожие ответы