C#中async和await的讲解
创作时间:
作者:
@小白创作中心
C#中async和await的讲解
引用
CSDN
1.
https://blog.csdn.net/qq_41375318/article/details/144289043
async和await是C#中用于简化异步编程的重要特性。它们的主要目的是降低编程难度,使开发者能够以同步编程的方式编写异步代码。本文将详细介绍async和await的设计目的、使用优点以及具体应用场景,并通过代码示例帮助读者更好地理解相关概念。
async和await的讲解
async和await是为降低编程难度设计的,所以本身是很简单的。
设计async和await的目的
顺序编程,不阻塞线程,降低编程难度(以同步编程的方式来写异步)。
优点:
- 避免回调地狱:传统的异步编程通常使用回调函数,这可能导致代码结构复杂,难以理解和维护。async 和 await 可以避免这种情况。
- 更好的错误处理:异步方法可以像同步方法一样使用 try-catch 块来处理异常
- 提高性能:通过异步编程,应用程序可以在等待I/O操作完成时继续执行其他任务,从而提高应用程序的响应性和吞吐量。
public static async void ShowMessageDialogByTime(string host, string title, string tipText, bool isQuestion)
{
CommonDialogParams ps = new CommonDialogParams()
{ DialogHost = host, DialogTitle = title, DialogTipText = tipText, IsQuestion = isQuestion };
DialogHost.Show(new CurcularProgressView(), host);
try
{
await Task.Run(() =>
{
Thread.Sleep(1000);
});
}
finally
{
// 执行完毕后,关闭窗口
DialogHost.Close(host);
}
}
使用注意:
- async 声明为异步方法,不会阻塞,异步执行,不会阻塞当前线程
- await 等同 task.wait(),await 会等待线程方法执行结束为止,直到 task 执行结束,才会执行下面的代码
带返回值的异步方法
public async Task test(string a)
{
//await Console.WriteLine("同步的方法");
Task<string> task = new Task<string>(() =>
{
return "hello";
});
await task;
}
private async void button1_Click(object sender, EventArgs e)
{
await test("major");
}
返回Task的必须有await和return
public static async Task<object> ShowCurcularProgress(string host, Action action)
{
// 显示窗口
DialogHost.Show(new CurcularProgressView(), host);
try
{
await Task.Run(() =>
{
action();
});
return new CommonDialogResult() { Button = CommonDialogButton.Ok };
}
finally
{
// 执行完毕后,关闭窗口
DialogHost.Close(host);
}
}
代码示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace 异步async和await
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
// 该方法不会阻塞主线程
public async void test2()
{
var task = Task.Run(() =>
{
Thread.Sleep(4000);
MessageBox.Show("hello2222");
});
// await会等待线程方法执行结束为止, 直到task执行结束,才会执行MessageBox.Show("hello9999922");
await task;
MessageBox.Show("hello9999922");
}
private void btnclick(object sender, RoutedEventArgs e)
{
// 调用异步方法
test2();
MessageBox.Show("按钮点击了");
// 同样效果
//Action action = () =>
//{
// Thread.Sleep(300000);
//};
//Task task2 = new Task(action);
//task2.Start(); ===> Task.Run()
// task.wait() ==> await
}
}
}
热门推荐
中芯国际崛起!与三星差距仅2.6%,全球代工排名或将再变
幼儿园大班健康教育游戏活动
直播间买花省时省力 逛花市更像过年仪式
孩子语言发育的每个阶段,家长要如何引导?
Chrome浏览器如何禁止广告弹出
武侠小说中的武学境界解析
揭秘桃花运是什么意思
构建循环经济产业模式的鑫岳集团实践
汽车电梯门系统设计解密:安全与效率并重的垂直交通解决方案
美式咖啡怎么做咖啡与水的正确比例 超详细美式咖啡制作教程口感描述
高三复读生的心理调适与备考策略
探寻螺蛳粉的魅力:从柳州起源到全国风靡的旅程
四叶草的奥秘:从形态特征到文化象征
特种工程塑料聚醚醚酮(PEEK )全解析
孙权:东吴大帝的江山统治
常见的训练本体觉的家庭训练游戏介绍
复活节的由来:一个关于重生与希望的节日
防爆电气设备的安装有哪些要求?一般规定
2025国外摄影系的大学排名院校推荐
好听又冷门的古风网名
船舶设计中的舾装材料研究
僧人也能做官?明代僧官,及汉传佛教和藏传佛教僧官制度是怎样的
《龙息:神寂》评测:一款无费卡的卡牌游戏
个人储蓄率对家庭理财的重要影响分析
超市服务台的岗位要求有哪些?
内存的双通道功能有什么作用
探索经典与科技的碰撞:百达翡丽揭示石英表与机械表核心差异
山西地形如此独特,为什么被称为“表里山河”?
男人酒桌上暗恋你的表现
游泳减肥跑步减肥