dart異步編程

dart是單線程 一定要記得很清楚
dart異步不同于java的線程凉当,java線程是搶占式篙骡,但dart相當(dāng)于開辟了一個(gè)新的進(jìn)程的線程柱锹,不會對當(dāng)前數(shù)據(jù)產(chǎn)生影響拜鹤,也就沒有所謂的鎖 這是單線程的好處

Isolate機(jī)制 isolate一般不會在代碼中直接使用

舉個(gè)栗子:


image.png
import 'dart:isolate';

void main() {
  ReceivePort port = ReceivePort();
  Isolate.spawn(fun, port.sendPort);///固定寫法
  port.listen((t) {///這里是設(shè)置當(dāng)前receivePort 監(jiān)聽
    print("接收到其他isolate發(fā)過來的消息闽巩!");///這里接收了其他isolate發(fā)送的消息
    print(t);///接收到的為fun方法里面發(fā)送的消息
  });
}
void fun(SendPort sendPort) {
  var receivePort = new ReceivePort();
  var port = receivePort.sendPort;
  port.send("a");///發(fā)送消息
  sendPort.send("---");///發(fā)送消息
  receivePort.listen((t) {///這里是設(shè)置當(dāng)前receivePort 監(jiān)聽
    print("接收到當(dāng)前isolate發(fā)過來的消息钧舌!");///這里接收了當(dāng)前發(fā)送的消息
    print(t);
  });
}
Isolate并行

Isolate相互之間不是會干擾的


image.png
image.png
import 'dart:isolate';
void main() {
  Isolate.spawn(i1, "");
  Isolate.spawn(i2, "");
}
void i1( msg) {
  print("isolate1 執(zhí)行");
  Future.doWhile((){///Future代表未來要做的事情
    print("isolate1 future");
    return true;
  });
}
void i2( msg) {
  print("isolate2 執(zhí)行");
  Future.doWhile((){///Future代表未來要做的事情
    print("isolate2 future");
    return true;
  });
}
Future

舉個(gè)文件讀取的栗子:


image.png
import 'dart:io';
void main() {
  new File(r"C:\Users\hp\Desktop\test.txt") ///在前面使用r 就可以不適用轉(zhuǎn)義符號
      .readAsString()
      .then((t) {///then表示接下來要做的事情
    print(t);
    return "你好";///這里可以返回值 繼續(xù)傳給下一個(gè)then方法來使用
  }).then((t) {///這里繼續(xù)使用then方法
    print(t);
  });
}
async await

async await 一般都是配合使用 他會阻塞 使其一步一步執(zhí)行
繼續(xù)舉個(gè)文件讀取的栗子:


image.png
import 'dart:io';
void main() {
  ful().then((t){
    print(t);
  });
}
Future<String> ful() async {
  String s1 = await new File(r"C:\Users\hp\Desktop\test.txt").readAsString();///這個(gè)執(zhí)行完才能往下執(zhí)行
  String s2 = await new File(r"C:\Users\hp\Desktop\test1.txt").readAsString();
  return "$s1\n$s2";
}
stream訂閱模式
image.png

只能單個(gè)訂閱,多個(gè)的話會報(bào)錯(cuò)

import 'dart:io';
void main() {
  Stream<List<int>> stream = new File(r"C:\Users\hp\Desktop\test.txt").openRead();
  stream.listen((_){
    print("訂閱");
  });
  stream.listen((_){
    print("訂閱");
  });
}

但是將他變成廣播模式可以進(jìn)行多訂閱:

  var broadcastStream = stream.asBroadcastStream();
  broadcastStream.listen((_){
    print("訂閱");
  });
  broadcastStream.listen((_){
    print("訂閱");
  });
廣播訂閱

由單訂閱轉(zhuǎn)換而來的 : 和單訂閱唯一的區(qū)別就是 允許多訂閱

  var stream = Stream.fromIterable([1,2,3,4]);
  var broadcastStream = stream.asBroadcastStream();
  broadcastStream.listen((i){
    print("訂閱者1:${i}");
  });
  broadcastStream.listen((i){
    print("訂閱者2:${i}");
  });

需要注意的地方:直接創(chuàng)建廣播涎跨,發(fā)送一條消息是不能接收到的

import 'dart:async';
void main(){
  var streamController = StreamController.broadcast();
  streamController.add("1");
  streamController.stream.listen((i){
    print("廣播:"+i);
  });
  streamController.close();
}

記得關(guān)閉

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洼冻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子隅很,更是在濱河造成了極大的恐慌撞牢,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件外构,死亡現(xiàn)場離奇詭異普泡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)审编,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門撼班,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垒酬,你說我怎么就攤上這事砰嘁〖” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵矮湘,是天一觀的道長斟冕。 經(jīng)常有香客問我,道長缅阳,這世上最難降的妖魔是什么磕蛇? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮十办,結(jié)果婚禮上秀撇,老公的妹妹穿的比我還像新娘。我一直安慰自己向族,他們只是感情好呵燕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著件相,像睡著了一般再扭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夜矗,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天泛范,我揣著相機(jī)與錄音,去河邊找鬼侯养。 笑死敦跌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逛揩。 我是一名探鬼主播柠傍,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辩稽!你這毒婦竟也來了惧笛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤逞泄,失蹤者是張志新(化名)和其女友劉穎患整,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喷众,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡各谚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了到千。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昌渤。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖憔四,靈堂內(nèi)的尸體忽然破棺而出膀息,到底是詐尸還是另有隱情般眉,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布潜支,位于F島的核電站甸赃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冗酿。R本人自食惡果不足惜埠对,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裁替。 院中可真熱鬧鸠窗,春花似錦、人聲如沸胯究。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裕循。三九已至,卻和暖如春净刮,著一層夾襖步出監(jiān)牢的瞬間剥哑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工淹父, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留株婴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓暑认,卻偏偏與公主長得像困介,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蘸际,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349