日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

async异步方法

發(fā)布時間:2025/6/17 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 async异步方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在C# 中,可以使用asyc+await來完成一個異步方法

async用來標(biāo)志一個使用了await的方法是非阻塞API,是一個異步方法,就當(dāng)成一個普通關(guān)鍵字就行了。關(guān)鍵是await,await是配合 Task、Task<TResult>或者非阻塞API使用的。它也是多線程操作。await表示等待task的操作,阻塞了這個方法,這個異步方法的內(nèi)部是線性的,是從上之下的,等執(zhí)行到await停下來,返回方法的調(diào)用方,同時執(zhí)行調(diào)用方接下來的代碼和異步方法中的代碼。對于異步方法本身來說,方法內(nèi)部是線性的,但是對于調(diào)用異步方法的主體來說,是并行的。

1、task和async的區(qū)別

場景不同。task用于多線程編程,主要用于與當(dāng)前線程無關(guān)的操作,比如我開一個線程去把隊列里面的日志寫到本地文件,這個隊列可能很長,我直接開一個線程去寫就行了,反正我又不用這個寫日志這個行為返回什么值;至于async標(biāo)識一個異步方法,我需要用到這個異步方法的返回值Task<TResult>,但是這個方法中可能執(zhí)行時間有點長,你先不用等我了去干其它的,你干其它的的同時我計算這個值,我們并行操作,等你用到這個值的時候我沒執(zhí)行完你就接著等,我完成了你就直接用。我們一起工作,肯定不虧。

2、async代碼

1 /* 2 ======================================================================== 3 演示功能:4 1.async方法內(nèi)部是線性執(zhí)行的5 2.調(diào)用async方法的主體和async方法是并行執(zhí)行的6 3.在使用async返回值時,若async返回了值直接使用,還沒有完成就等待完成7 總結(jié):8 async中代碼是順序執(zhí)行的,只是執(zhí)行到await會說我這個操作可能要很長時間,如果你急著用那你就等我完成,如果你不急著用你就先干別的,9 你正在干別的時候如果我完成了你想用的時候就直接用,如果你完成了我還沒完成那你就接著等我完成。 10 反正我們是并行的,肯定不虧。 11 ======================================================================== 12 */ 13 using System; 14 using System.Collections.Generic; 15 using System.Linq; 16 using System.Text; 17 using System.Threading; 18 using System.Threading.Tasks; 19 20 namespace AsyncDemo 21 { 22 class Program 23 { 24 public static int a = 0; 25 static void Main(string[] args) 26 { 27 var result = Add(); 28 // 等待3秒輸出,說明是在使用值得時候進(jìn)行等待 29 // 輸出6,說明async是線性執(zhí)行的 30 Console.WriteLine(result.Result); 31 var result2 = Add(); 32 // 再次等待3秒 33 Thread.Sleep(3000); 34 Console.WriteLine(1); 35 Console.WriteLine(result2.Result); 36 // 同時輸出1和6,說明是并行執(zhí)行的,Add開始沉睡3秒的時候主線程同時沉睡3秒,然后主線程醒了同時result2被賦予了值 37 Console.Read(); 38 } 39 public static async Task<int> Add() 40 { 41 await Task.Run(() => 42 { 43 Thread.Sleep(3000); 44 a += 3; 45 }); 46 a = 6; 47 return a; 48 } 49 } 50 }

項目工程地址:https://github.com/Beiluola/AsyncDemo

轉(zhuǎn)載于:https://www.cnblogs.com/Jeely/p/10983445.html

總結(jié)

以上是生活随笔為你收集整理的async异步方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。