ConfigureAwait
- ConfigureAwait

Explicação
Noções básicas sobre ConfigureAwait em C# .NET: usando contextos de sincronização e tratamento de exceções
Em C# .NET, o método ConfigureAwait é usado para configurar como uma tarefa assíncrona deve ser retomada em um thread após ter sido aguardada. Especificamente, ele determina se a continuação da tarefa deve ocorrer no mesmo contexto de sincronização (como o thread de UI em um aplicativo de desktop) ou em um thread diferente.
Quando você aguarda uma tarefa sem usar ConfigureAwait, por padrão, a continuação da tarefa será retomada no mesmo contexto de sincronização em que a tarefa foi originalmente iniciada. Isso pode ser problemático se a tarefa for de longa duração e prender o thread da UI, impedindo que o usuário interaja com o aplicativo até que a tarefa seja concluída. Nesse caso, você pode usar ConfigureAwait(false) para indicar que a continuação deve ser executada em um thread do pool de threads em vez do thread da UI.
Entretanto, há casos em que você deseja garantir que a continuação de uma tarefa seja executada no contexto de sincronização original. Isto é particularmente importante se a tarefa executa operações que interagem com a UI, como atualizar um controle ou exibir uma caixa de diálogo. Nesses casos, você deve usar ConfigureAwait(true) ou simplesmente omitir ConfigureAwait completamente para indicar que a continuação deve ser executada no contexto de sincronização original.
Em relação às exceções, ao utilizar ConfigureAwait(false), quaisquer exceções que ocorram durante a execução da tarefa não serão propagadas para o contexto de sincronização original. Em vez disso, eles serão observados no thread do pool de threads que executa a continuação. Isso pode dificultar o tratamento de exceções de maneira consistente e previsível, pois o código que trata a exceção precisará ser executado no thread do pool de threads.
Em geral, é uma boa prática usar ConfigureAwait(false) quando você não precisar garantir que a continuação seja executada no contexto de sincronização original e usar ConfigureAwait(true) ou omitir ConfigureAwait quando precisar garantir que a continuação é executado no contexto de sincronização original. E é importante estar ciente de como as exceções são tratadas ao usar ConfigureAwait(false) e garantir que qualquer código de tratamento de exceção seja executado no thread apropriado.
.NET8
- No .NET 8 é adicionado um novo tipo que fornece todas as maneiras diferentes de configurar aguardáveis
- Artigo
namespace System.Threading.Tasks;
[Flags]
public enum ConfigureAwaitOptions
{
None = 0x0,
ContinueOnCapturedContext = 0x1,
SuppressThrowing = 0x2,
ForceYielding = 0x4,
}