1) Async and await syntax in C# allows long-running and blocking tasks to run asynchronously without blocking the main thread or UI. This keeps the user interface responsive. 2) Async methods return Task or Task<T> objects and use the await keyword to suspend execution until the awaited task completes. This avoids "callback hell" and makes asynchronous code appear synchronous and easier to read. 3
