static async void Start()
{
string s = "ass"; Console.WriteLine(getMemory(s)+"Hello World!" + Thread.CurrentThread.ManagedThreadId); await AsyncMethod();
Console.WriteLine(getMemory(s) + "End World!" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine();
}
static async Task AsyncMethod()
{ await Task.Run(() =>
{
Console.WriteLine("AsyncMethod 执行," + Thread.CurrentThread.ManagedThreadId);
});
}

public static string getMemory(object o) // 获取引用类型的内存地址方法 
{
  GCHandle h = GCHandle.Alloc(o, GCHandleType.WeakTrackResurrection);

  IntPtr addr = GCHandle.ToIntPtr(h);

  return "0x" + addr.ToString("X");
}

红色的变量的 地址在await  两边一样吗?

是不一样的!

getMemory 这个方法换个写法就一样了:

 public static string getMemory(object o) // 获取引用类型的内存地址方法
{
GCHandle h = GCHandle.Alloc(o, GCHandleType.Pinned); IntPtr addr = h.AddrOfPinnedObject(); return "0x" + addr.ToString("X");
}

这个值应该是一个的。至少地址是一个。因为引用类型都是在堆上。堆是进程所有的。

async 和await 是成对出现的。有一个注意的点:async 是方法的修饰符,这个方法的await 之后的是回调。出了这个方法就不是的了。

在Winform 程序的Buttion_Click() 方法中,使用了这种异步语法,是没问题的,

     private async void button1_Click(object sender, EventArgs e)
{
textBox1.Text += "zzz " + Thread.CurrentThread.ManagedThreadId.ToString() + "\r\n";
await Task.Run(() => { Thread.Sleep(2000); });
button1.Text += "2";
MessageBox.Show("))))))))))))))))s"); textBox1.Text += "ttt " + Thread.CurrentThread.ManagedThreadId.ToString()+"\r\n"; }

  

这个Buttion_Click 上可以写async!   Await 后面的代码,是主线程操作了控件,这是编译器知道这个程序,然后进行了相应的处理。

async 这种语法,在Web项目中,会增加吞吐量,不会缩短对单个请求的响应时间。

下面是一个Async 的解析后的治理:

  static async Task Main()
{
Console.WriteLine("");
await Task.Run(() => {
Console.WriteLine("");
});
Console.WriteLine("");
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks; public class button1_Click : IAsyncStateMachine
{
public int state1; public AsyncVoidMethodBuilder t__builder; public object sender; public EventArgs e; private TaskAwaiter taskWaiter; private void MoveNext()
{
int num = state1;
try
{
TaskAwaiter awaiter;
if (num != )
{
Console.WriteLine("");
awaiter = Task.Run(delegate
{
Console.WriteLine("");
}).GetAwaiter();
if (!awaiter.IsCompleted)
{
num = (state1 = );
taskWaiter = awaiter;
button1_Click stateMachine = this;
t__builder.AwaitUnsafeOnCompleted(ref awaiter, ref stateMachine);
return;
}
}
else
{
awaiter = taskWaiter;
taskWaiter = default(TaskAwaiter);
num = (state1 = -);
}
awaiter.GetResult();
Console.WriteLine("");
}
catch (Exception exception)
{
state1 = -;
t__builder.SetException(exception);
return;
}
state1 = -;
t__builder.SetResult();
} void IAsyncStateMachine.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
this.MoveNext();
} private void SetStateMachine(IAsyncStateMachine stateMachine)
{
} void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine)
{
//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
this.SetStateMachine(stateMachine);
}
}

async/await 的引用的更多相关文章

  1. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  2. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  3. ASP.NET 中的 Async/Await 简介

    本文转载自MSDN 作者:Stephen Cleary 原文地址:https://msdn.microsoft.com/en-us/magazine/dn802603.aspx 大多数有关 async ...

  4. EntityFramework 如何进行异步化(关键词:async·await·SaveChangesAsync·ToListAsync)

    应用程序为什么要异步化?关于这个原因就不多说了,至于现有项目中代码异步化改进,可以参考:实际案例:在现有代码中通过async/await实现并行 这篇博文内容针对的是,EntityFramework ...

  5. ASP.NET 上的 Async/Await 简介

    原文链接 大多数有关 async/await 的在线资源假定您正在开发客户端应用程序,但在服务器上有 async 的位置吗?可以非常肯定地回答“有”.本文是对 ASP.NET 上异步请求的概念性概述, ...

  6. 进阶篇:以IL为剑,直指async/await

    接上篇:30分钟?不需要,轻松读懂IL,这篇主要从IL入手来理解async/await的工作原理. 先简单介绍下async/await,这是.net 4.5引入的语法糖,配合Task使用可以非常优雅的 ...

  7. 从async await 报错Unexpected identifier 谈谈对上下文的理解

    原文首发地址: 先简单介绍下async await: async/await是ES6推出的异步处理方案,目的也很明确:更好的实现异步编程.   详细见阮大神 ES6入门 现在说说实践中遇到的问题:使用 ...

  8. async/await使用深入详解

    async和await作为异步模型代码编写的语法糖已经提供了一段时间不过一直没怎么用,由于最近需要在BeetleX webapi中集成对Task方法的支持,所以对async和await有了深入的了解和 ...

  9. 异步 async & await

    1 什么是异步 异步的另外一种含义是计算机多线程的异步处理.与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程. 2 异步场景 l  不 ...

随机推荐

  1. 我的新书,ArcGIS从0到1,京东接受预定,有160个视频,851分钟

     我的新书,ArcGIS从0到1,京东接受预定,8月08日至08月16日发货https://item.jd.com/53669213250.html当当网 http://product.dangdan ...

  2. ArcGIS超级工具SPTOOLS-数据处理篇

    1. 数据处理 1.1  两个图层按重叠度赋属性 两个面层按重合度赋属性,下图把依据赋数据属性图层,按重合度,赋值给目标.,重合度设置为负值,取面积最大的. 1.2  分区域消除 按区域字段值相同的, ...

  3. error:Cannot pull with rebase

    原文文链接:https://blog.csdn.net/u012385190/article/details/70670213git 执行git pull –rebase报错误如下: error: C ...

  4. 设置django 时间

    使用Django的DateTimeField(auro_now_add=True)设置当前时间为创建时间时,时间往往与当前时间对应不上,这是由于Django默认使用的是[UTC](世界标准时间)时区, ...

  5. SQL-W3School-高级:SQL CREATE INDEX 语句

    ylbtech-SQL-W3School-高级:SQL CREATE INDEX 语句 1.返回顶部 1. CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用 ...

  6. python中的cls到底指的是什么

    python中的cls到底指的是什么,与self有什么区别? 2018年07月31日 11:13:09 rs勿忘初心 阅读数:7769   作者:秦风链接:https://www.zhihu.com/ ...

  7. Server 2012使用Windows PowerShell cmdlet安装角色和角色服务功能

    Server 2012使用Windows PowerShell cmdlet安装角色和角色服务功能  Windows Server 2012 安装 SQL server 2008 出现了如下错误: 解 ...

  8. JAVA 基础编程练习题20 【程序 20 求前 20 项之和】

    20 [程序 20 求前 20 项之和] 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和. 程序分析:请抓住分子与分母的变化规律. pac ...

  9. git 命令常用笔记

    1. 全局操作 git --version //git 机器上是否存在 git init --bare project.git //服务端:初始化一个新的仓库 chown -R zhangsan:zh ...

  10. 工具 --- Git使用

    创建远程仓库 Github 首相在GitHub网站创建一个仓库:右上角加号➕,选择new repository 然后创建编辑仓库:名称.说明.是否公开.语言.分支风格等信息.然后创建. 复制仓库地址 ...