Async/await pitfalls — common mistakes to avoid.
1. async void:
1// BAD — fire and forget, exceptions lost2async void Button_Click(object sender, EventArgs e)3{4 await GetDataAsync(); // Exception may be lost!5}67// GOOD — use Task8async Task Button_ClickAsync(object sender, EventArgs e)9{10 await GetDataAsync();11}
2. .Result and .Wait():
1// BAD — deadlock!2var data = GetDataAsync().Result; // Blocks!34// GOOD — async all the way5var data = await GetDataAsync();
3. Not awaiting:
1// BAD — fire and forget2GetDataAsync(); // Not awaited!34// GOOD — await5await GetDataAsync();
4. Multiple awaits:
1// BAD — sequential2var data = await GetDataAsync();3var users = await GetUsersAsync();45// GOOD — parallel6var dataTask = GetDataAsync();7var usersTask = GetUsersAsync();8await Task.WhenAll(dataTask, usersTask);