ConfigureAwait(false) Prevents Deadlocks
ConfigureAwait(false) avoids deadlocks in UI and ASP.NET synchronization contexts.
Before (Deadlock Risk)
Blocking the async operation in a UI application causes deadlocks.
public void DoSomething()
{
var result = GetDataAsync().Result; // Deadlocks if GetDataAsync resumes on UI thread
}
public async Task<string> GetDataAsync()
{
await Task.Delay(1000);
return "Hello";
}
After (Deadlock Fixed)
Using ConfigureAwait(false), continuation runs on a thread pool instead of the UI thread.
public void DoSomething()
{
var result = GetDataAsync().ConfigureAwait(false).GetAwaiter().GetResult(); // No deadlock
}
public async Task<string> GetDataAsync()
{
await Task.Delay(1000).ConfigureAwait(false);
return "Hello";
}