3.C#异步编程的几种方式

本文介绍了C#中实现异步编程的几种方式,重点讲解了使用async/await关键字构建异步方法,展示了如何通过BackgroundWorker类创建异步操作,并对比了传统的异步模式。示例代码演示了异步方法的直观认识和异步操作的取消,强调了async/await在简化异步编程中的优势。
摘要由CSDN通过智能技术生成

目录

 

1.异步定义

2.async/await构建异步方法

2.1直观认识

2.2 异步方法详解

2.3异步操作的取消

3.使用BackgroundWorker类构建异步方法

3.并行循环

4.传统旧模式


1.异步定义

异步程序中,程序代码不需要按照编写时的顺序严格执行。为了改善代码性能,有时需要在一个新的线程中运行一部分代码,有时无需创建新的线程,但为了更好的利用单个线程的能力,需要改变代码的执行顺序。

简而言之:异步编程提供代码的非顺序执行能力。让程序能够在部分耗时操作的同时,干其它的事情。

2.async/await构建异步方法

async/await构建异步方法是C# 5.0引入的新特性。是几种异步方法中最简练的一种。

2.1直观认识

示例代码:

//异步操作示例类

using System;
using System.Threading.Tasks;
using System.Net;
using System.Diagnostics;

namespace ASyncTest
{
    class MyDownloadString
    {
        Stopwatch st = new Stopwatch();
        Stopwatch st1 = new Stopwatch();

        /// <summary>
        /// 普通方式
        /// </summary>
        public void DoRun()
        {
            const int LargeNum = 600000;
            st.Start();
            int t1 = CountCharacters(1, "http://www.microsoft.com");
            int t2 = CountCharacters(2, "http://www.csdn.net");
            CountToALargeNumber(1, LargeNum);
            CountToALargeNumber(2, LargeNum);
            CountToALargeNumber(3, LargeNum);
            CountToALargeNumber(4, LargeNum);

            Console.WriteLine("http://www.microsoft.com 网站字符数:{0}", t1);
            Console.WriteLine("http://www.csdn.net 网站字符数:{0}", t2);
            st.Stop();
        }

        /// <summary>
        /// 异步方式
        /// </summary>
        public void DoRunAsync()
        {
            const int LargeNum = 600000;
            st1.Start();
            Task<int> t1 = CountCharactersAnSyn(1, "http://www.microsoft.com");
            Task<int> t2 = CountCharactersAnSyn(2, "http://www.csdn.net");
            CountToALargeNumber2(1, LargeNum);
            CountToALargeNumber2(2, LargeNum);
            CountToALargeNumber2(3, LargeNum);
            CountToALargeNumber2(4, LargeNum);

            Console.WriteLine("http://www.microsoft.com 网站字符数:{0}", t1.Result);
            Console.WriteLine("http://www.csdn.net 网站字符数:{0}", t2.Result);
        }
        private void CountToALargeNumber(int id, int largeNum)
        {
            for (long i = 0; i < largeNum; i++)
            { }
            Console.WriteLine(" 结束计数ID{0}: {1,4:N0}ms", id, st.Elapsed.TotalMilliseconds);
        }

        private int CountCharacters(int id, string uriString)
        {
            WebClient wc1 = new WebClient();
            Cons

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值