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
}
}
}
热门推荐
昭通好美,必须见上一面
云南昭通气候特征:多民族融合下的独特气候区县解析
警惕“白居易典藏酒”骗局:小心买酒送股陷阱
白居易酒业骗局揭秘:小心“买酒送股”
保险柜的秘密:西北方财运大揭秘
西北角风水大作战:装修秘籍大揭秘
Paul Saladino揭秘原始人饮食法真相
农业革命:从狩猎采集到定居农耕的饮食革命
8个原石加沙木,末日地带2玻璃制作详解
DNF手游日常委托攻略:7大副本开启条件与奖励详解
DNF手游必刷日常:各等级副本开启与奖励详解
四年级数学质量提升方案:让教学更高效
玉林去贵州西江千户苗寨二日游
国庆去那玩?云南的玉龙雪山还是广西的玉林山水甲天下?还是四川的稻城亚丁?
玉林十大名建筑,广西玉林旅游景点
鱼缸青苔清除指南:六种实用方法详解
智能控制水质光照,轻松养好鱼缸青苔
甘肃银行最新利率政策:存款、贷款、理财利率全解读
电动车顿挫感详解:从简单检查到专业维修
总投资203.06亿元:英山至黄梅高速公路项目正式开工
中国电信IPTV账号密码忘记怎么办?多种实用解决方案帮你轻松找回
中国电信IPTV桥接模式全攻略:设置方法、优势与常见问题
头孢氨苄胶囊:冬季感冒的“万能药”?
诺捷康头孢氨苄片:冬季呼吸道感染的合理用药指南
头孢氨苄PK其他抗生素,谁才是真王者?
《勇者斗恶龙:怪物仙境3》评测:魔王的爱好竟是电子斗蛐蛐?
揭秘解放军七大经典战术:解放战争的秘密武器
15部优质中文电影推荐:从动画到真人,助力孩子成长
苹果树冬季修剪指南:专家详解关键技术和管理要点
九紫离火运下的帝王传奇:唐玄宗、明嘉靖、清康熙