C# 异步操作 async await 的用法

1. async与 await 成对出现 async 在方法前使用 ,方法体面面用  await .

2. 使用async 和await定义异步方法不会创建新线程.

3.await 后面一定是一个扫行时间长的任务,要用 Task.Run(()=>{    }); 类似的代码来执行.

4.返回写成 Task<Type>. 后面的代码要等 这个执行完后 再执行.

5.界面不阻塞

例子:

private async void button2_Click(object sender, EventArgs e)
{
//异步方法
this.button2.Enabled = false;

long length = await AccessWebAsync();
this.button2.Enabled = true;
// 这里可以做一些不依赖回复的操作
OtherWork(); // 这里要等 AccessWebAsync 执行完后 才能执行

this.textBox1.Text += String.Format("\n 回复的字节长度为: {0}.\r\n", length);
txbMainThreadID.Text = Thread.CurrentThread.ManagedThreadId.ToString();
}

private void OtherWork()
{
this.textBox1.Text += "\r\n等待服务器回复中.................\n";
}

private async Task<long> AccessWebAsync()
{

//await Task.Run(() => { Thread.Sleep(5000); Console.WriteLine("bbb1"); Console.WriteLine("bbb2"); Console.WriteLine("bbb3"); });
MemoryStream content = new MemoryStream();
await Task.Run(() =>
{
// 对MSDN发起一个Web请求
HttpWebRequest webRequest = WebRequest.Create("http://msdn.microsoft.com/zh-cn/") as HttpWebRequest;
if (webRequest != null)
{
// 返回回复结果
using (WebResponse response = webRequest.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
responseStream.CopyTo(content);
}
}
}
});

txbAsynMethodID.Text = Thread.CurrentThread.ManagedThreadId.ToString();
return content.Length;
}

时间: 2024-10-05 04:27:06

C# 异步操作 async await 的用法的相关文章

async await 的用法

async函数返回一个 Promise 对象,可以使用then方法添加回调函数.当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句. 下面代码是一个获取股票报价的函数,函数前面的async关键字,表明该函数内部有异步操作.调用该函数时,会立即返回一个Promise对象. async function getStockPriceByName(name) { const symbol = await getStockSymbol(name); const

promise和async/await的用法

promise和async都是做异步处理的, 使异步转为同步 1.promise 它和Promise诞生的目的都是为了解决“回调地狱”, promise使用方法: <button @click="testBtn()">点击</button> get(data) { return new Promise((resolve, reject)=>{ if (data > 5) { resolve(data); } else { reject("数

Promise和Async/Await用法整理

1.Promise 1.简介 Promise,简单来说就是一个容器,里面保存着某个未来才会结束的时间(通常是一个异步操作的结果) Promise对象的基本语法: new Promise((resolve,reject) => { //..... }); 从语法上来说,Promise是一个对象,从它可以获取异步操作的消息. 基本语法: let p = new Promise((resolve,reject) => { //... resolve('success') }); p.then(res

异步操作要了解的ES7的async/await

1.什么是async.await? async顾名思义是“异步”的意思,async用于声明一个函数是异步的.而await从字面意思上是“等待”的意思,就是用于等待异步完成.并且await只能在async函数中使用. 通常async.await都是跟随Promise一起使用的.为什么这么说呢?因为async返回的都是一个Promise对象同时async适用于任何类型的函数上.这样await得到的就是一个Promise对象(如果不是Promise对象的话那async返回的是什么 就是什么): awa

js中回调函数,promise 以及 async/await 的对比用法 对比!!!

在编程项目中,我们常需要用到回调的做法来实现部分功能,那么在js中我们有哪些方法来实现回调的? 方法1:回调函数 首先要定义这个函数,然后才能利用回调函数来调用! login: function (fn) { var app = getApp() wx.login({ success: res => { let code = res.code; wx.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) {

C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!

说起异步,Thread,Task,async/await,IAsyncResult 这些东西肯定是绕不开的,今天就来依次聊聊他们 1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行:对于比较耗时的操作(例如io,数据库操作),或者等待响应(如WCF通信)的操作,可以单独开启后台线程来执行,这样主线程就不会阻塞,可以继续往下执行:等到后台线程执行完毕,再通知主线程,然后做出对应操作! 在C#中开启新线程比较简单 static void Main(string[]

async/await学习笔记

async/await特性 异步方法 包含async修饰符 该修饰符只用于标示这个方法有await表达式 至少包含一个await表达式 返回类型必须为下面这三种 void//尽量别用 Task Task<T> Task类代表这次的异步任务,能从Task中获得任务状态,Task用于表示会返回T类型值的任务 参数不能有out,ref 命名约定:以Async结尾 异步方法的控制流 //调用方法 static void Main(string[] args) { Console.WriteLine(&

Async/Await 异步编程中的最佳做法

近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支持的信息. 本文旨在作为学习异步编程的“第二步”:我假设您已阅读过有关这一方面的至少一篇介绍性文章. 本文不提供任何新内容,Stack Overflow.MSDN 论坛和 async/await FAQ 这类在线资源提供了同样的建议. 本文只重点介绍一些淹没在文档海洋中的最佳做法. 本文中的最佳做法更大程度上是“指导原则”,而不是实际规则. 其中每个指导原则都有一些例外情况

异步编程中的最佳做法(Async/Await) --转

近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支持的信息. 本文旨在作为学习异步编程的“第二步”:我假设您已阅读过有关这一方面的至少一篇介绍性文章. 本文不提供任何新内容,Stack Overflow.MSDN 论坛和 async/await FAQ 这类在线资源提供了同样的建议. 本文只重点介绍一些淹没在文档海洋中的最佳做法. 本文中的最佳做法更大程度上是“指导原则”,而不是实际规则. 其中每个指导原则都有一些例外情况