概述:C#中的異步編程有兩主要方式:Task.Run用于在后臺線程執(zhí)行同步操作,而async-await更適用于清晰表達異步流程?;A(chǔ)用法展示了它們的簡單應(yīng)用,高級用法則演示了它們的結(jié)合使用,提供更靈活的異步編程模式
在C#中,Task.Run
和async-await
都涉及異步編程,但用法和場景有所不同。以下是詳細講解以及相應(yīng)實例代碼,包括基礎(chǔ)和高級用法。
基礎(chǔ)用法:
使用 Task.Run
:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
Console.WriteLine("主線程開始");
// 使用 Task.Run 在后臺線程執(zhí)行操作
Task.Run(() => DoSomeWork());
Console.WriteLine("主線程結(jié)束");
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 執(zhí)行異步操作
await DoSomeWorkAsync();
Console.WriteLine("主線程結(jié)束");
}
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 在后臺線程執(zhí)行操作,并等待完成
await Task.Run(async () =>
{
Console.WriteLine("后臺線程開始工作");
await DoSomeWorkAsync();
Console.WriteLine("后臺線程完成工作");
});
Console.WriteLine("主線程結(jié)束");
}
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 執(zhí)行多個異步操作
await Task.WhenAll(DoSomeWorkAsync(), DoAnotherWorkAsync());
Console.WriteLine("主線程結(jié)束");
}
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
更適用于清晰表達異步流程。在高級用法中,兩者可以結(jié)合使用,根據(jù)具體情況選擇使用哪種方式。
該文章在 2024/1/24 23:32:26 編輯過