在异步下载期间,在C#WPF应用程序中阻止了UI线程

我有以下基本WPF应用程序,我希望在文本框中显示内容。 但是,当我单击按钮时,UI线程似乎正在阻塞。 我不确定我做错了什么,因为我从Pluralsight课程的练习文件中抓取了这段代码。

XAML和代码:

      

代码:

 namespace AsyncFetch { ///  /// Interaction logic for MainWindow.xaml ///  public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private async void getButton_Click(object sender, RoutedEventArgs e) { WebClient w = new WebClient(); string txt = await w.DownloadStringTaskAsync("http://www.google.com"); dataTextBox.Text = txt; } } } 

这不应该阻止UI线程,并且该技术是正确的。

但是,仅仅因为方法是Async,并返回Task ,并不保证整个方法(或任何方法)将异步运行。

对于WebClient ,在完全准备并启动请求之前,控件不会返回给调用者。 使用WebClient ,我相信URI准备(包括所有DNS查找)可以同步发生,并且在异步部分(实际请求)开始之前是必需的,这可能会在请求返回之前导致延迟。