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. arcpy workspace already in transaction mode

    arcpy workspace already in transaction mode RuntimeError: workspace already in transaction mode 同一个工 ...

  2. Google Python Style Guide

    https://google.github.io/styleguide/pyguide.html

  3. ARP Poisoning Attack and Mitigation Techniques ARP欺骗 中间人攻击 Man-In-The-Middle (MITM) attack 嗅探 防范 Can one MAC address have two different IP addresses within the network?

    小结: 1. ARP缓存投毒,窃听中毒者之间的通信: 2. ARP Poisoning Attack and Mitigation Techniques - Ciscohttps://www.cisc ...

  4. kotlin中集合

    fun main(arg: Array<String>) { //可读写的集合创建 val mutableListOf1 = mutableListOf<Int>(1, 2, ...

  5. Intent Flags

    Activity都是运行在任务栈里面,但如果要从广播接受者BordercastReceiver或者服务Service去启动一个Activity,必须为当前Activity创建一个新的任务栈才能正常显示 ...

  6. 开发CLI命令行

    命令行工具:CLI 是在命令行终端使用的工具,如git, npm, vim 都是CLI工具.比如我们可以通过 git clone 等命令简单把远程代码复制到本地 和 cli 相对的是图形用户界面(gu ...

  7. 建立第一个Django工程---linux中的python

    建立第一个Django工程 环境: ip: 192.168.0.92 系统:centos7.5 安装django pip install django 启动一个HelloWorld工程 django- ...

  8. Eclipse阿里代码规范插件安装,卸载与使用

    使用阿里代码规范插件,我们就可以查看我们写的代码是否规范了 找到阿里代码插件网址: 网址:https://p3c.alibaba.com/plugin/eclipse/update/ 打开我们的网址, ...

  9. 剑指offer难题代码

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,前重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.假如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序 ...

  10. VS编译错误._CRT_SECURE_NO_WARNINGS、_WINSOCK_DEPRECATED_NO_WARNINGS

    1.不记得原来的情况了,记得大概是这样: 低版本的 VC编译器 使用 strcpy.sprintf 等它不会报错,但是 高版本的 VS编译就会报错,大意是 strcpy.sprintf 等函数 不安全 ...