Silverlight 4.0 webClient.DownloadStringTaskAsync().Wait()冻结UI

Silverlight 4.0 webClient.DownloadStringTaskAsync().Wait()冻结UI,silverlight-4.0,task,parallel-processing,async-ctp,Silverlight 4.0,Task,Parallel Processing,Async Ctp,我正在使用Silverlight4和新的异步CTP private void button1_Click(object sender, RoutedEventArgs e) { WebClient wb = new WebClient(); var t = wb.DownloadStringTaskAsync("http://www.google.com"); t.Wait();

我正在使用Silverlight4和新的异步CTP

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            WebClient wb = new WebClient();
            var t = wb.DownloadStringTaskAsync("http://www.google.com");
            t.Wait();            
        }
此代码导致UI冻结。
另一方面,此代码运行良好:

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            WebClient wb = new WebClient();
            var t = Task.Factory.StartNew(() => Debug.WriteLine("Doing something"));
            t.Wait();            
        }
这两者之间有什么区别,是什么导致第一个冻结?

.Wait()
阻塞任务,直到任务完成

第一个示例进行实际工作,即获取www.google.com并使用
。Wait()
将不允许事件处理程序返回,直到该页面被下载

第二个示例仅调用
Debug.WriteLine
,即立即返回的调用,允许任务立即完成,因此您从未注意到
.Wait()
正在阻止事件处理程序


您很可能希望使用
.ContinueWith()
而不是
.Wait()
来访问异步下载的结果。这样,事件处理程序会立即返回,您可以将代码放入
.ContinueWith()
块中,对下载的数据进行处理。

但第一个示例永远不会结束。它卡住了。为什么?当我运行代码时,它几乎立即返回。最佳选择是网络问题,它会阻止请求连接。代理指向错误的服务器,dns错误,不确定。