C# 委托异步 和 async /await 两种实现的异步
2021-06-21 10:05
标签:static 指正 tpc 线程 rgs sync 自己 wait pcl 最近频繁使用异步所以自己综合的学习了一把异步相关的知识,自己稍加整理了一下(这也是我试着写的第一篇,如果有不对的,希望大神来指正!) 首先是 委托实现的异步 class Program public delegate int weituo();//定义了个委托 public int xxx() return 1; ///定义了个方法 static void Main(string[] args) weituo a =new weituo(new Program().xxx); IAsyncResult result= a.BeginInvoke(null,null); Console.WriteLine("1234"); } } 执行结果如下; 接着是 async /await 的异步实现 class Program public static async void xxx() } 执行结果 如果将 public static async void xxx() 改为 public static async void xxx() { 结果变为 说明,async与await关键字本身并不会产生多线程; await 不会开启新的线程,当前线程会一直往下走直到遇到真正的Async方法(比如说HttpClient.GetStringAsync),这个方法的内部会用Task.Run或者Task.Factory.StartNew 去开启线程。也就是如果方法不是.NET为我们提供的Async方法,我们需要自己创建Task,才会真正的去创建线程 C# 委托异步 和 async /await 两种实现的异步 标签:static 指正 tpc 线程 rgs sync 自己 wait pcl 原文地址:https://www.cnblogs.com/wangsenyuan/p/10240201.html
{
{
Thread.Sleep(3000);
Console.WriteLine("11111.");
}
{
Thread.Sleep(1000);
int i= a.EndInvoke(result);
Console.WriteLine("1235");
Console.WriteLine(i.ToString());
Console.ReadLine();
{
{
int i = 0;
await Task.Run(() =>
{
new Program().xxxa();
});
Console.WriteLine("123");
}
public async Task
{
Thread.Sleep(3000);
Console.WriteLine("11111.");
return (2);
}
static void Main(string[] args)
{
xxx();
Console.WriteLine("1234");
Console.WriteLine("1235");
Console.ReadLine();
}
{
int i = 0;
await Task.Run(() =>
{
new Program().xxxa();
});
Console.WriteLine("123");
}
int i = 0;
await new Program().xxxa();
Console.WriteLine("123");
}
文章标题:C# 委托异步 和 async /await 两种实现的异步
文章链接:http://soscw.com/index.php/essay/96854.html