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();
        }
    }
}
相关推荐
骇客野人1 小时前
Java BIO / NIO / AIO 完整详解 + 编程技巧
java·开发语言·nio
霸道流氓气质1 小时前
OpenTelemetry 入门与实战:Java Agent、Spring Boot Starter与LLM调用追踪示例
java·开发语言·spring boot
波力海苔夹心脆6751 小时前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
外收内放2 小时前
Python基础语法练习题(62原始版本及其优化版本)
开发语言·python
马剑威(威哥爱编程)2 小时前
【AI全栈后端12-12】Spring Boot 3.x 到 4.x 迁移实操:Jakarta 11、Jackson 3 与 AI 2.0
java·开发语言·spring boot·后端
三月微暖寻春笋2 小时前
【和春笋一起学C++】(七十二)类模板
开发语言·c++·实例·类模板·使用类模板·数组模板
释厄6232 小时前
智能体释放度子集律——文本 ⊂ 音频 ⊂ 视频⊂ 游戏
开发语言·游戏·microsoft·音视频
Sarvartha2 小时前
Object 类
java·开发语言
j7~2 小时前
【C++ 标准项目】发布订阅消息队列 (篇七):项目创建与基础工具模块搭建
开发语言·c++·log4j·uuid·protobuf·helper工具·消息定义类型和交换机类型定义