<返回更多

C#异步编程:Task.Run vs. async-await,掌握基础与高级用法

2024-03-09  今日头条  架构师老卢
加入收藏

概述:C#中的异步编程有两主要方式:Task.Run用于在后台线程执行同步操作,而async-awAIt更适用于清晰表达异步流程。基础用法展示了它们的简单应用,高级用法则演示了它们的结合使用,提供更灵活的异步编程模式

在C#中,Task.Run和async-await都涉及异步编程,但用法和场景有所不同。以下是详细讲解以及相应实例代码,包括基础和高级用法。

基础用法:

使用Task.Run:

using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        Console.WriteLine("主线程开始");

        // 使用 Task.Run 在后台线程执行操作
        Task.Run(() => DoSomeWork());

        Console.WriteLine("主线程结束");
        Console.ReadLine();
    }

    static void DoSomeWork()
    {
        // 模拟耗时操作
        Console.WriteLine("后台线程开始工作");
        Task.Delay(2000).Wait();
        Console.WriteLine("后台线程完成工作");
    }
}

使用async-await:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("主线程开始");

        // 使用 async-await 执行异步操作
        await DoSomeWorkAsync();

        Console.WriteLine("主线程结束");
    }

    static async Task DoSomeWorkAsync()
    {
        // 模拟异步操作
        Console.WriteLine("异步操作开始");
        await Task.Delay(2000); // 模拟异步工作
        Console.WriteLine("异步操作完成");
    }
}

高级用法:

使用Task.Run:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("主线程开始");

        // 使用 Task.Run 在后台线程执行操作,并等待完成
        await Task.Run(async () =>
        {
            Console.WriteLine("后台线程开始工作");
            await DoSomeWorkAsync();
            Console.WriteLine("后台线程完成工作");
        });

        Console.WriteLine("主线程结束");
    }

    static async Task DoSomeWorkAsync()
    {
        // 模拟异步操作
        await Task.Delay(2000); // 模拟异步工作
    }
}

使用async-await:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("主线程开始");

        // 使用 async-await 执行多个异步操作
        await Task.WhenAll(DoSomeWorkAsync(), DoAnotherWorkAsync());

        Console.WriteLine("主线程结束");
    }

    static async Task DoSomeWorkAsync()
    {
        // 模拟异步操作
        Console.WriteLine("异步操作1开始");
        await Task.Delay(2000); // 模拟异步工作
        Console.WriteLine("异步操作1完成");
    }

    static async Task DoAnotherWorkAsync()
    {
        // 模拟异步操作
        Console.WriteLine("异步操作2开始");
        await Task.Delay(1000); // 模拟异步工作
        Console.WriteLine("异步操作2完成");
    }
}

Task.Run适用于将同步操作放入异步上下文中,而async-await更适用于清晰表达异步流程。在高级用法中,两者可以结合使用,根据具体情况选择使用哪种方式。

关键词:C#      点击(8)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多C#相关>>>