前往
大廳
主題

【async 學習筆記】在unity裡面使用async是不是搞錯了什麼?

%%鼠 拒收病婿 | 2020-11-30 00:19:48 | 巴幣 222 | 人氣 4243

前言:
感謝大佬提供的教學文獻,搞了一下才了解C# async的基本用法。

如果再有時間的話可以看看這篇,主要是裡面的這段話:
非同步代碼讓我想起了一個故事,有個人提出世界是懸浮在太空中的,但是一個老婦人立即提出質疑,她聲稱世界位於一個巨大烏龜的背上。 When the man enquired what the turtle was standing on, the lady replied, “You’re very clever, young man, but it’s turtles all the way down!” As you convert synchronous code to asynchronous code, you’ll find that it works best if asynchronous code calls and is called by other asynchronous code—all the way down (or “up,” if you prefer). 其他人已注意到非同步程式設計的傳播行為,並將其稱為「傳染」或將其與僵屍病毒進行比較。 無論是烏龜還是僵屍,無可置疑的是,非同步代碼趨向于推動周圍的代碼也成為非同步代碼。 此行為是所有類型的非同步程式設計中所固有的,而不僅僅是新 async/await 關鍵字。

所謂"傳染",是要一整串有從呼叫到async方法都設為async。

這篇主要是紀錄上篇提到要做的工具的學習筆記與製作紀錄。(async對我來說就像是一個新世界,不寫下走來的歷程就會迷路似的。)




會用async而不是coroutine的主要原因是:
  1. async能有回傳值,coroutine不行。
  2. coroutine只有start和stop,且不能先存成變數等待時機到再執行。
  3. 加減學新知,coroutine只能活在unity的影子下,而async在網頁、app上好像滿常用到的。
最簡單的寫法:

自訂類別:


結果:

第23行,不加也行,只是async應該都配個await。

至於第21行,在爬文章的時候有看到說不推薦使用async void,原因是若用async task,有exception時會傳給task,但async void沒有物件可以傳,所以會直接傳給最上層。 (討論串)(還有這篇但我還沒看)

搞懂用法,接下來就是想要怎麼運用了


雜談:
原本想順便多打一些,但明天上班,早點睡好了。
po上明天的手便當:
抱歉了味蕾,我太需要那些營養
送禮物贊助創作者 !
0
留言

創作回應

joLoo 走鹿
這便當相當哈扣
2020-11-30 10:30:34
%%鼠 拒收病婿
其實意外好吃喔,有弄出香辣的口感[e19]
2020-11-30 21:43:22
克萊
看到好多中藥,中醫師表示非常滿意(點頭
2020-11-30 10:39:43
%%鼠 拒收病婿
YA!! 中醫師認證,超級欣慰的XD
2020-11-30 21:43:45
派大星教授死掉了咩噗
給你一個作業XD 研究如果已經Start一個Async的Func, (跑到一半未完成),但想要中途取消,要怎麼做
2020-11-30 13:01:34
%%鼠 拒收病婿
感謝老師出題!! 我好像有看到什麼CancellationTokenSource之類的,我來研究研究
2020-11-30 21:45:04
%%鼠 拒收病婿
交作業:https://home.gamer.com.tw/artwork.php?sn=5003050 不知道有沒有回答到老師的問題XD
2020-12-05 20:38:26
派大星教授死掉了咩噗
Coroutine很簡單Stopcoroutone就好,Async會變成小麻煩
2020-11-30 13:07:23
派大星教授死掉了咩噗
哇對CTS, 只是那個強迫你用Exception Programming Pattern真的很煩 (個人感覺 [e8]
2020-12-01 00:28:18
追蹤 創作集

作者相關創作

更多創作