c#异步编程

1.创建任务的几种方法

csharp 复制代码
 public void TaskAsync1()
 {
     //异步编程
     Task task = new Task(() =>
     {
         //Thread.Sleep(1000);
         Console.WriteLine("Task 的使用");
     });
     task.Start();
 }

 public void TaskAsync2()
 {
     Task.Factory.StartNew(() => { Console.WriteLine("创建异步线程2"); });
 }
 public void TaskAsync3()
 {
     Task<int> task3 = Task.Run(
            () =>
            {
                Console.WriteLine("create Task3");
                return 30;
            });
     Console.WriteLine("返回值" + task3.Result);
 }

2.c#Task 常用的方法

在C#中,Task类是用于表示异步操作的重要类,它提供了许多用于管理和处理异步操作的方法。以下是Task类中常用的方法:

  1. Task.Run:创建并启动一个新的任务,该任务在后台线程上执行指定的操作。

  2. Task.Delay:创建一个在指定时间后完成的任务,可以用于创建延迟操作。

  3. Task.WhenAll:创建一个任务,在所有提供的任务都已完成时完成。

  4. Task.WhenAny:创建一个任务,在任何提供的任务首先完成时完成。

  5. Task.ContinueWith:创建一个任务,在另一个任务完成后执行指定的操作。

  6. Task.Wait:阻塞当前线程,直到任务完成为止。

  7. Task.Result:获取任务的执行结果,如果任务尚未完成,则会阻塞当前线程直到任务完成。

  8. Task.WaitAny:阻塞当前线程,直到任何一个提供的任务完成。

这些方法可以帮助开发者对异步任务进行控制、管理和处理,使得异步编程更加灵活和高效。需要注意的是,在使用这些方法时,开发者需要关注线程安全性和异常处理,以确保异步操作的可靠性和稳定性。


在C#中,异步编程是一种用于处理并发操作和提高程序性能的强大技术。异步编程的目的是允许程序在进行耗时操作(如文件读写、网络请求、数据库查询等)时不被阻塞,而可以继续执行其他任务,从而提高程序的响应速度和吞吐量。

在C#中,异步编程通常使用async和await关键字来实现。通过在方法前面加上async关键字,可以将该方法标记为异步方法。而在方法内部,可以使用await关键字来等待异步操作的完成,然后继续执行后续的代码。

以下是一个简单的示例,演示了在C#中如何使用异步编程:

csharp 复制代码
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        // 异步发送HTTP请求
        string result = await GetWebPage("https://www.example.com");
        
        // 打印获取的网页内容
        Console.WriteLine(result);
    }
    
    static async Task<string> GetWebPage(string url)
    {
        using (var client = new HttpClient())
        {
            // 异步发送GET请求并获取响应内容
            var response = await client.GetAsync(url);
            
            // 确保响应成功
            response.EnsureSuccessStatusCode();
            
            // 异步读取响应内容
            return await response.Content.ReadAsStringAsync();
        }
    }
}
相关推荐
向宇it2 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
向宇it3 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
坐井观老天8 小时前
在C#中使用资源保存图像和文本和其他数据并在运行时加载
开发语言·c#
pchmi10 小时前
C# OpenCV机器视觉:模板匹配
opencv·c#·机器视觉
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭12 小时前
C#都可以找哪些工作?
开发语言·c#
boligongzhu13 小时前
Dalsa线阵CCD相机使用开发手册
c#
向宇it1 天前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则
sukalot1 天前
windows C#-命名实参和可选实参(下)
windows·c#
小码编匠1 天前
.NET 下 RabbitMQ 队列、死信队列、延时队列及小应用
后端·c#·.net