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
}
}
}
热门推荐
盐酸可乐定片达到疗效需要多少疗程
教你挑选好羊肉:5个关键点确保新鲜优质
2024年十二星座运势:事业财运双丰收,感情运需用心经营
PyTorch实战:全连接网络拟合简单函数
高中函数专题:表示法与单调性详解,附例题解析
星座心理测试:从决策到情感,揭秘你的性格密码
DIY汽车贴膜风险大,专业服务更划算
涨知识|提升跑步能力,不妨试试增加碳水摄入量
私家车报废新规实施:60万公里后引导报废,年检成关键
清炖草鱼:保留营养的智慧之选
清蒸草鱼的神仙做法,你get了吗?
冬季东山岛:200吨风动石、海景民宿,海岛度假正当时
喝水少、吃太咸?教你告别口干舌燥
冬季润燥水果指南:告别口干舌燥,让身体充满水分
从车辆检查到安全驾驶:东山岛自驾游完全准备指南
顺丰调整酒类寄递规则,安全包装是关键
想读布朗大学法学硕士?课程、费用、申请条件全知道
《0课时是Inssa Time》:一部关于校园、社交媒体与青春恋爱的暖心之作
沪深市场强势个股:中百集团、粤传媒、上海凤凰
突破!常温常压下实现二氧化碳高选择性制甲醇

生态环境部发文,13项污染防治技术将全行业禁用
关于工业空气净化器,有哪些必须知道的黑幕
绩效奖惩如何兼顾激励与公平?六大模块助力企业制度优化
奖惩有度:家庭教育中的科学引导法
探访“蛇钞”兑换首日:有币商高出一倍价钱现场收购
被疯炒的蛇币蛇钞:高价回收转卖 专家建议应理性审慎投资
单价最高涨超10倍!蛇币、蛇钞狂热的背后
剧本杀:提升社交能力的新方式,但需警惕这些风险
职场局中局:创新剧本杀课程破解90后管理培训难题
剧本杀成内向者社交新选择,角色扮演助突破社交困境