c#异步定义
-
async 和 await 关键字:async 用于修饰方法,表示这是一个异步方法,可以在方法内使用 await 关键字等待其他异步操作的完成。await 关键字用于等待一个异步操作完成,同时让执行线程返回给调用方,不会阻塞线程,允许执行其他操作。
-
Task 和 Task: Task 是一个代表异步操作的抽象类,Task 是 Task 的泛型版本,表示异步操作的返回结果。异步方法可以返回一个 Task 或 Task 对象,用于表示异步操作的状态和结果。
-
异步方法:异步方法通常以 async 关键字修饰,并使用 Task 或 Task 作为返回类型。在异步方法内部,可以使用 await 关键字等待其他异步方法、任务或操作完成,而不会阻塞线程。
-
异步操作:异步操作通常是指那些可能会花费很长时间的操作,如网络请求、磁盘读写等。通过将这些操作封装为异步方法或返回 Task 对象,可以让这些操作变为非阻塞的,并允许在等待操作完成期间执行其他操作。
异步示例1
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Console.WriteLine("开始执行主线程");
// 调用异步方法
DoSomethingAsync();
Console.WriteLine("主线程继续执行其他操作");
// 在主线程执行其他操作
for (int i = 0; i < 5; i++)
{
Console.WriteLine("主线程正在执行其他操作:" + i);
await Task.Delay(500);
}
Console.WriteLine("主线程执行完成");
Console.ReadKey();
}
static async Task DoSomethingAsync()
{
Console.WriteLine("异步方法开始");
// 模拟耗时操作,使用 Task.Delay 来进行延迟
await Task.Delay(2000);
Console.WriteLine("异步方法完成");
}
}
开始执行主线程
异步方法开始
主线程继续执行其他操作
主线程正在执行其他操作:0
主线程正在执行其他操作:1
主线程正在执行其他操作:2
主线程正在执行其他操作:3
异步方法完成
主线程正在执行其他操作:4
主线程执行完成
异步示例2
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Console.WriteLine("开始执行主线程");
var task1 = DoSomethingAsync();
var task2 = DoSomethingAsync2();
await task1.ConfigureAwait(false);
await task2;
Console.WriteLine("主线程继续执行其他操作");
Console.WriteLine("主线程执行完成");
}
static void DoSomething()
{
Console.WriteLine("同步方法开始");
// 执行耗时的同步操作
for (int i = 0