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