其实这两个关键字的功效比之前的异步方法调用有一个好处,那就是异步阻塞的方法可以有返回值。之前都是通过回调函数实现,执行上下文会切换,不过和这个执行过程类似。可以对这两个关键字这么理解:遇到async的语句是异步的,遇到await的语句是阻塞的。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Debug.WriteLine("{0} Main Start.", DateTime.Now);
Thread1();
Debug.WriteLine("{0} Main End.", DateTime.Now);
Console.In.ReadLine();
} private static async void Thread1()
{
var result = await Proc1(); //此处会阻塞
Debug.WriteLine("{0} result={1}.", DateTime.Now, result);
} private static Task<int> Proc1() //注意此处返回类型的定义
{
return Task.Run(() => {
Debug.WriteLine("{0} Proc 1 start.", DateTime.Now);
Thread.Sleep();
Debug.WriteLine("{0} Proc 1 end.", DateTime.Now);
return ;
});
}
}
}

程序输出:

// :: Main Start.
// :: Main End.
// :: Proc start.
// :: Proc end.
// :: result=.
private async void MyWebClient_Navigating(string url)
{
await Task.Run(() => { }); //语法有点扯淡,有了这句编译就能通过
DetailNavigate(url); //同步方法
}

C#中的async和await的更多相关文章

  1. [译] C# 5.0 中的 Async 和 Await (整理中...)

    C# 5.0 中的 Async 和 Await [博主]反骨仔 [本文]http://www.cnblogs.com/liqingwen/p/6069062.html 伴随着 .NET 4.5 和 V ...

  2. 在MVC中使用async和await的说明

    首先,在mvc中如果要用纯异步请不要使用async和await,可以直接使用Task.Run. 其次,在mvc中使用async和await可以让系统开新线程处理Task的代码,同时不必等Task执行结 ...

  3. C# 中的Async 和 Await 的用法详解

    众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...

  4. ES7中的async和await

    ES7中的async和await 在上一章中,使用Promise将原本的回调方式转换为链式操作,这就将一个个异步执行的操作串在一条同步线上了.下一次的操作必须等待当前操作的结束. 使用Promise的 ...

  5. async和await的使用总结 ~ 竟然一直用错了c#中的async和await的使用。。

    对于c#中的async和await的使用,没想到我一直竟然都有一个错误.. ..还是总结太少,这里记录下. 这里以做早餐为例 流程如下: 倒一杯咖啡. 加热平底锅,然后煎两个鸡蛋. 煎三片培根. 烤两 ...

  6. ES2017 中的 Async 和 Await

    ES2017 在 6 月最终敲定了,随之而来的是广泛的支持了我最喜欢的最喜欢的JavaScript功能: async(异步) 函数.如果你也曾为异步 Javascript 而头疼,那么这个就是为你设计 ...

  7. .NET中的async和await关键字使用及Task异步调用实例

    其实早在.NET 4.5的时候M$就在.NET中引入了async和await关键字(VB为Async和Await)来简化异步调用的编程模式.我也早就体验过了,现在写一篇日志来记录一下顺便凑日志数量(以 ...

  8. C# 中的 Async 和 Await

    这篇文章由Filip Ekberg为DNC杂志编写. 自跟随着.NET 4.5 及Visual Studio 2012的C# 5.0起,我们能够使用涉及到async和await关键字的新的异步模式.有 ...

  9. es2017中的async和await要点

    1. async和await最关键的用途是以同步的写法实现了异步调用,是对Generator异步方法的简化和改进.使用Generator实现异步的缺点如下: 得有一个任务执行器来自动调用next() ...

  10. ES7中的async 和 await

    async 和 await 一个函数如果加上 async ,那么该函数就会返回一个 Promise async function test() { return "1" } con ...

随机推荐

  1. c-free

  2. python--分布式爬虫

    //server import socket, select, re, queue, redis from multiprocessing import Pool, cpu_count from py ...

  3. socket编程与利用进程进行多并行连接

    呈现一张基本的socket阻塞式模型,如下图: 一: 对于一对一的进行C/S回射: 服务端(server.c): #include<unistd.h> #include<stdio. ...

  4. hdu 3518 (后缀数组)

    题目描述: 找出一个字符串中至少重复出现两次的字串的个数(重复出现时不能重叠). code: 后缀数组处理,对于得到height 进行查找...  参考http://blog.csdn.net/mis ...

  5. ABAP认识

    ABAP是一种高级企业应用编程语言(Advanced Business Application Programming),起源于20世纪80年代.经过不断的发展,现在的版本为ABAP/4,SAP R/ ...

  6. Foundation框架—集合

    Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...

  7. Mybatis根据表自动生成相关代码

    这个地方的生成需要用到三个文件,generatorConfig.xml.mybatis-generator-core-1.3.1.jar和mysql-connector-java-5.1.29.jar ...

  8. MyJni撒旦

    package com.baidu.jnitest; import android.os.Bundle; import android.app.Activity; import android.vie ...

  9. Java 基本语法(1)

    关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中所有字母都为小写 Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用. ...

  10. Java xml object 互转

    public class ClassRoom { private int id; private String name; private int grade; public int getId() ...