Was sind die Unterschiede zwischen ConfigureAwait (false) und Task.Run?
Ich verstehe, dass es empfohlen wird, zu verwendenConfigureAwait(false)
zumawait
s im Bibliothekscode, sodass nachfolgender Code nicht im Ausführungskontext des Aufrufers ausgeführt wird, der möglicherweise ein UI-Thread ist. Das verstehe ich auchawait Task.Run(CpuBoundWork)
sollte anstelle von verwendet werdenCpuBoundWork()
aus dem gleichen Grunde.
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
}
Beispiel mitTask.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
});
}
Was sind die Unterschiede zwischen diesen beiden Ansätzen?