iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
自我挑戰組

30天學習flutter系列 第 23

23.關於flutter的非同步處理(一)

  • 分享至 

  • xImage
  •  

今天來簡單的聊聊dart裡處理非同步事件的兩個種類:Future和Stream

非同步處理

一般執行程式時會立刻回傳值,在大量計算或等待資料時,同步處理會卡在這個操作上,並等到完成計算才會進行下一步;而非同步處理,是在我們執行程式碼時,當無法在執行程式碼之後直接取得答案,此時非同步會先去執行其他的事情,當有結果時在獲取答案

而對於flutter,Dart在運行在單個執行“thread”中。如果Dart代碼在執行時阻塞,例如:處理一個需要長時間運行的計算操作或等待 I/O 完成。此時整個程序會被“freeze"。

並且Dart都運行在一個isolate的context環境中,並且isolate中擁有對應Dart代碼片段運行所需的所有內存。

Dart 代碼執行時不允許其它的代碼片段在與之相同的 isolate 中執行。當想在同一時間運行多個不同的Dart代碼,那麼就要將它們分別運行於不同的isolate中。 (在Web則使用worker替代isolate。)

Future用於處理單個非同步操作,Stream用來處理連續的非同步操作

Future

Future用在不會立即完成的計算。非同步函數返回一個Future,並只有當結果出來時才會告訴你。

Stream

Stream是一個非同步事件序列,他會一直做一個非同步循環,有可能無法在當下就跟Stream取得資料,但只要尚未停止取得事件,那麼就會在最新事件準備好時通知

Future使用

當一個返回future的函數被調用時,當一個返回 future 對象的函數被調用時,會發生兩件事(未完成與完成):

  • 將函數操作列入queue中等待執行並返回一個未完成的Future對象
  • 當函數操作執行完成,Future對象變為完成並攜帶一個值或一個錯誤

如何使用?

  • 使用async(表示該函式是非同步函式)和await (表示要等待非同步操作完成)
  • 使用Future API

上一篇
22.flutter的持久化存儲(五)
下一篇
24.關於flutter的非同步處理(二)
系列文
30天學習flutter30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言