白骑士的C#教学进阶篇 2.5 异步编程

21 篇文章 1 订阅

系列目录

上一篇:白骑士的C#教学进阶篇 2.4 LINQ查询

        异步编程在现代应用程序开发中至关重要,特别是当处理I/O操作、网络请求和计算密集型任务时。C# 提供了一个强大的异步编程模型,包括异步方法、async和await关键字,以及并行编程的基础。在本节中,我们将介绍如何定义和使用异步方法、掌握async和await关键字的用法,以及了解并行编程的基本概念。这些知识将帮助您编写高效、响应迅速的C#应用程序。

异步方法与任务

        异步方法是以异步方式执行的,并返回一个任务对象(‘Task‘)。这种方法可以释放当前线程去执行其他工作。

定义异步方法

using System;
using System.Threading.Tasks;


public class Program
{
    public static async Task Main(string[] args)
    {
        await PerformTaskAsync();
        Console.WriteLine("Task completed.");
    }

    public static async Task PerformTaskAsync()
    {
        Console.WriteLine("Task started.");
        await Task.Delay(2000); // 模拟异步操作
        Console.WriteLine("Task finished.");
    }
}

        在这个示例中,‘PerformTaskAsync‘是一个异步方法,它使用‘Task.Delay‘模拟一个耗时的异步操作。

async与await关键字

        ‘async‘关键字用于修饰方法,表示方法可以包含异步操作。‘await‘关键字用于等待异步操作完成,并返回结果。‘await‘只能在‘async‘方法中使用。

使用async和await

using System;
using System.Net.Http;
using System.Threading.Tasks;


public class Program
{
    public static async Task Main(string[] args)
    {
        string result = await FetchDataAsync("https://api.github.com");
        Console.WriteLine(result);
    }

    public static async Task<string> FetchDataAsync(string url)
    {
        using HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (compatible; GrandCircus/1.0)");
        string response = await client.GetStringAsync(url);
        return response;
    }
}

        在这个示例中,‘FetchDataAsync‘方法异步获取指定URL的数据,并返回结果。‘await‘关键字用于等待‘GetStringAsync‘操作完成。

并行编程基础

        并行编程用于同时执行多个任务,提高程序的性能。C# 提供了并行编程的支持,例如‘Parallel‘类和‘Task‘类。

使用Parallel类

using System;
using System.Threading.Tasks;


public class Program
{
    public static void Main(string[] args)
    {
        Parallel.For(0, 10, i =>
        {
            Console.WriteLine($"Task {i} started.");
            Task.Delay(1000).Wait(); // 模拟耗时操作
            Console.WriteLine($"Task {i} finished.");
        });

        Console.WriteLine("All tasks completed.");
    }
}

        在这个示例中,‘Parallel.For‘用于并行执行多个任务,每个任务都模拟一个耗时操作。

使用Task类

using System;
using System.Threading.Tasks;


public class Program
{
    public static async Task Main(string[] args)
    {
        Task task1 = Task.Run(() => PerformTask(1));
        Task task2 = Task.Run(() => PerformTask(2));
        Task task3 = Task.Run(() => PerformTask(3));

        await Task.WhenAll(task1, task2, task3);

        Console.WriteLine("All tasks completed.");
    }

    public static void PerformTask(int taskId)
    {
        Console.WriteLine($"Task {taskId} started.");
        Task.Delay(1000).Wait(); // 模拟耗时操作
        Console.WriteLine($"Task {taskId} finished.");
    }
}

        在这个示例中,‘Task.Run‘用于启动并行任务,‘Task.WhenAll‘用于等待所有任务完成。

总结

        通过学习异步编程的基本概念和技术,您可以显著提升程序的性能和用户体验。理解异步方法与任务、async和await关键字的使用,以及并行编程的基础知识,您将能够更有效地处理I/O操作和其他耗时任务。异步编程不仅可以提高程序的响应速度,还可以在不阻塞主线程的情况下执行复杂的操作。掌握这些技术后,您将具备编写现代、高效C#应用程序的能力。在接下来的章节中,我们将继续探索C#的更多高级特性和编程技巧,以进一步提升您的开发水平。

下一篇:白骑士的C#教学高级篇 3.1 高级语言特性​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值