2018年1月28日 星期日

Easy Threading - 便利的執行緒

分類:Scripting
發行者:Arklay
最初發佈:2014 年 8 月 25 日。
已使用 Unity 5.3.4、5.4.3 和 5.5.0 提交,以改善這些 Unity 版本之中的相容性。
取得 Easy Threading



本文為 胡亂說・隨便寫 擅自翻譯,詳細內容以原文為準。

需要 Unity 5.3.4 或更高版本。

輕鬆處理多執行緒:
桌機構建、Windows Store(UWP)、WebPlayer、iOS 和 Android。

文件

論壇主題(範例和支援)

要構建一個真正具有響應的 Unity 遊戲,你必須要維持主執行緒的長時間運行,並且要小心避免阻塞主執行緒。這意味著你將必須在背景執行各種操作。

Unity 的協程(Coroutine)總是在主執行緒上執行。

在背景運行執行緒,意味著當你必須操作 Unity 物件時就要謹慎的回到主執行緒。

使用這個資源包,這只是小菜一碟,只要寫這句:Task.RunInMainThread(SomeFunction);
SomeFunction 保證會在主執行緒中執行。

當然了!可以使用 Lambda 表達式:
Task.RunInMainThread(()=>
{
// This code will execute in the main thread
});

而這個資源也使運行執行緒有愉快的體驗:

建立執行緒只要使用以下語法:
Task.Run (DoSomeWorkOnABackgroundThread);

建立回傳一些值的執行緒(例如回傳整數):
Task<int>.Run (CalculateSomeIntegerInTheBackground);

當然你會想要收到整數:
Task<int>.Run (CalculateSomeIntegerInTheBackground).ContinueWith(ThisFunctionReceivesTheIntegerAsParameter);

或者,也許,你必須對玩家顯示整數(接收它的函數必須在主執行緒中執行):
Task<int>.Run (CalculateSomeIntegerInTheBackground).ContinueInMainThreadWith(ThisFunctionReceivesTheIntegerAsParameter);

這些只是這個資源包所包含的基本功能。

這個資源包重新實作以及擴充 .NET 的 System.Threading.Tasks 命名空間。

這個命名空間為你添加名為 Task(任務)的類(Class)來使執行緒管理更加容易。一個任務代表一個非同步操作。通常,Task 從非同步函數回傳並且提供繼續處理任務結果的能力。
一個任務不會被綁定在特定的執行緒模型:它代表正在完成的工作,而不是它正在執行的地方。與其它像是回呼函式(Callback)和事件(Event)模型這類非同步編製程序的方法(Method)相比,Task 具有許多優點。

你可以在 Parse 的網站上瞭解到更多關於任務的訊息。

已經針對桌機構建、Windows Store(UWP)、WebPlayer、iOS 以及 Android 測試過。

包含完整的原始碼,以及許多範例。我把這個資源用於自己的專案,所以將會繼續改進並擴充它。

如果你有任何意見、疑問、功能需求或只是需要一些協助來實踐一些多執行緒行為,只要透過論壇主題就能讓我知道。

取得 Easy Threading






取得 Easy Threading

本文為 胡亂說・隨便寫 擅自翻譯,詳細內容以原文為準。