C#图解教程(第5版) 同步方法

第21章 异步编程

21.1节 什么是异步

示例1 在.net framework环境下运行,增加代码

cs 复制代码
wc1.Headers.Add(HttpRequestHeader.UserAgent,
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36");
wc1.Headers.Add(HttpRequestHeader.Accept,
    "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8");
wc1.Headers.Add(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9,en;q=0.8");
wc1.Headers.Add(HttpRequestHeader.Referer, "https://www.baidu.com/");  // 部分站点校验 Referer

wc1.Encoding = Encoding.UTF8;

完整代码如下:

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Diagnostics;

namespace ConsoleApp128
{
    class MyDownloadString 
    {
        Stopwatch sw = new Stopwatch();
        public void DoRun()
        {
            const int LargeNumber = 6_000_000;
            sw.Start();
            int t1 = CountCharacters(1,"http://www.microsoft.com");
            int t2 = CountCharacters(2,"http://illustratedcsharp.com");
            CountToALargeNumber(1,LargeNumber);
            CountToALargeNumber(2, LargeNumber);
            CountToALargeNumber(3, LargeNumber);
            CountToALargeNumber(4, LargeNumber);
            Console.WriteLine($"Chars in https://www.iduba.com/:{t1}");
            Console.WriteLine($"Chars in http://illustratedcsharp.com:{t2}");
        }
        private int CountCharacters(int id, string uriString)
        {
            var wc1 = new WebClient();
            Console.WriteLine("Starting call{0}:{1,4:N0}ms",id,sw.Elapsed.TotalMilliseconds);
            //string result = wc1.DownloadString(uriString);
            wc1.Headers.Add(HttpRequestHeader.UserAgent,
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36");
            wc1.Headers.Add(HttpRequestHeader.Accept,
                "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8");
            wc1.Headers.Add(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9,en;q=0.8");
            wc1.Headers.Add(HttpRequestHeader.Referer, "https://www.baidu.com/");  // 部分站点校验 Referer

            wc1.Encoding = Encoding.UTF8;
            string result = wc1.DownloadString(uriString);

            Console.WriteLine("Call{0} completed:{1,4:N0} ms",id,sw.Elapsed.TotalMilliseconds);
            return result.Length;
        }
        private void CountToALargeNumber(int id, int value)
        {
            for (long i = 0; i < value; i++)
                ;
            Console.WriteLine("End counting{0}:{1,4:N0} ms", id,sw.Elapsed.TotalMilliseconds);
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            MyDownloadString ds = new MyDownloadString();
            ds.DoRun();
        }
    }
}
相关推荐
熊猫钓鱼>_>14 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
Ai-_Man14 小时前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节
raindayinrain15 小时前
c++设计模式
开发语言·c++·设计模式
hiahiahia12315 小时前
Streaming Model Output
开发语言·前端
熊猫钓鱼>_>15 小时前
鸿蒙PC高分屏与键鼠交互适配:DPI缩放、右键菜单一次讲清
开发语言·笔记·华为·ai编程·harmonyos·鸿蒙·鸿蒙心迹
octopus_c16 小时前
C++ 运算符重载详解 && 日期类的实现
开发语言·c++
Eiceblue16 小时前
用 Python 给 Word 文档加水印:文字、图片与批量处理
开发语言·vscode·python·word
j7~16 小时前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象
Fuyo_111916 小时前
深入解析 C++ unordered_set 与 unordered_map 的核心特性与性能实战
开发语言·c++
ShineWinsu17 小时前
对于Qt:QPushButton常见属性的解析
开发语言·c++·qt·api·gui·按钮·qpushbutton