我看一个代码示例。我很惊讶它是先ConfigureAwait(false)
调用 onhttpClient.GetStringAsync
然后 on sourceStream.WriteAsync
。据我所知ConfigureAwait(false)
,它表明代码应该继续执行而不是在上下文中UI
,而是在任务的上下文中。为什么然后调用它 2 次?
private async void Button_Click(object sender, RoutedEventArgs e)
{
HttpClient httpClient = new HttpClient();
//до этого момента всё выполняется в UI контексте?
string content = await httpClient.GetStringAsync("http://www.microsoft.com").
ConfigureAwait(false);
//после выполнения верхней строчки остальной код который внизу будет выполняться в контексте веррхнего таска?
using (FileStream sourceStream = new FileStream("temp.html", FileMode.Create,
FileAccess.Write, FileShare.None, 4096, useAsync: true))
{
byte[] encodedText = Encoding.Unicode.GetBytes(content);
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length).
ConfigureAwait(false);
//будь дальше какой-то код, в контексте какого потока он выполнялся б?
};
}