Answer
Avoid async void except for event handlers (it swallows exceptions); don't block with .Result/.Wait() (deadlocks/UI freeze); use ConfigureAwait appropriately in library code; and handle exceptions in fire-and-forget tasks. Prefer async Task and propagate cancellation with CancellationToken.
// Bad: async void hides exceptions
async void Load() { await FetchAsync(); }
// Better: async Task, awaited or safely handled
async Task LoadAsync() { await FetchAsync(); }Real-world example A silent failure disappears once a fire-and-forget async void is converted to an awaited async Task with try/catch.