C#异步编程:Task.Run vs. async-await,掌握基础与高级用法
概述: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更适用于清晰表达异步流程。在高级用法中,两者可以结合使用,根据具体情况选择使用哪种方式。
本文收集自互联网,如果发现有涉嫌侵权或违法违规的内容,请联系6532516@qq.com以便进行及时清除
文章评论(0)