Quelles sont les différences entre l'utilisation de ConfigureAwait(faux) et de la Tâche.Exécuter?

Je comprends qu'il est recommandé d'utiliser ConfigureAwait(false) pour awaits dans la bibliothèque de code, de sorte que le code suivant ne fonctionne pas en l'appelant du contexte d'exécution, ce qui pourrait être un thread d'INTERFACE utilisateur. Je comprends aussi que await Task.Run(CpuBoundWork) doit être utilisé au lieu de CpuBoundWork() pour la même raison.

Exemple avec ConfigureAwait

public async Task<HtmlDocument> LoadPage(Uri address)
{
    using (var client = new HttpClient())
    using (var httpResponse = await client.GetAsync(address).ConfigureAwait(false))
    using (var responseContent = httpResponse.Content)
    using (var contentStream = await responseContent.ReadAsStreamAsync().ConfigureAwait(false))
        return LoadHtmlDocument(contentStream); //CPU-bound
}

Exemple avec Task.Run

public async Task<HtmlDocument> LoadPage(Uri address)
{
    using (var client = new HttpClient())
    using (var httpResponse = await client.GetAsync(address))
        return await Task.Run(async () =>
        {
            using (var responseContent = httpResponse.Content)
            using (var contentStream = await responseContent.ReadAsStreamAsync())
                return LoadHtmlDocument(contentStream); //CPU-bound
        });
}

Quelles sont les différences entre ces deux approches?

InformationsquelleAutor Sam | 2013-02-16