• 使用同步上下文和任务调度以及async和await语法糖


    使用同步上下文和任务调度以及async和await语法糖

     private static readonly HttpClient s_httpClient = new HttpClient();
    
            private static readonly WebClient s_WebClientClient = new WebClient();
            /// <summary>
            /// 测试ConfigureAwait
            /// </summary>
            public static async void TestConfigureAwait()
            {
                string text2 = await s_httpClient.GetStringAsync("https://www.baidu.com/").ConfigureAwait(true);//默认,进行上下文交互,下面的代码会交给同步上下文去执行,如果设置ConfigureAwait(false)了,下面的代码不会再同步上下文中处理了。
                string text = await s_httpClient.GetStringAsync("https://www.baidu.com/").ConfigureAwait(false); //ConfigureAwait(false)设置成false时,获取的数据不正确,会有bug的   // bug
                //downloadBtn.Content = text;
                Console.WriteLine($"HttpClient获取的值 :{text}");
    
                //假设,bnttxt是窗体按钮,点击按钮之后获取信息,之后更新按钮显示文本
                //使用三种回调方式
                string bnttxt = null;
                //1、使用回调---使用TaskScheduler获取的同步上下文进行回调
                _ = s_httpClient.GetStringAsync("https://www.baidu.com/").ContinueWith(taskstr =>
                  {
                      bnttxt = taskstr.Result;
                  }, TaskScheduler.FromCurrentSynchronizationContext());
    
                //2、使用回调---同步上下文
                var currentSynchronizationContext = System.Threading.SynchronizationContext.Current;
                _ = s_httpClient.GetStringAsync("https://www.baidu.com/").ContinueWith(taskstr =>
                {
                    currentSynchronizationContext.Post(a => { bnttxt = taskstr.Result; }, null);
    
                }, CancellationToken.None);
    
                //3、使用回调---使用async/await语法糖
                var result = await s_httpClient.GetStringAsync("https://www.baidu.com/");
                bnttxt = result;
            }
    龙腾一族至尊龙骑
  • 相关阅读:
    取消PHPCMS V9后台新版本升级提示信息
    phpcmsv9全站搜索,不限模型
    jq瀑布流代码
    phpcms v9模版调用代码
    angular.js添加自定义服务依赖项方法
    angular多页面切换传递参数
    angular路由最基本的实例---简单易懂
    作用域事件传播
    利用angular控制元素的显示和隐藏
    利用angular给节点添加样式
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/15048859.html
Copyright © 2020-2023  润新知