❔ UniTask / Unity - await/async connoisseurs wanted. Need help understanding
public void TryRegister() { TryRegisterAsync().Forget(); // UI Register Button - Fire & Forget Method, } public async UniTaskVoid TryRegisterAsync() { PlayerSelectionData[] psd = await tryRegisterAsync(); UI_PlayerSelection.Instance.Init(psd); gameObject.SetActive(false); } private async UniTask<PlayerSelectionData[]> tryRegisterAsync() { var email = _emailInput.text; var pass = _passwordInput.text; PlayerSelectionData[] psd = await CommsManager.Instance.CMD_TryRegisterAsync(email, pass); return psd; }
public void TryRegister() { TryRegisterAsync().Forget(); // UI Register Button - Fire & Forget Method, } public async UniTaskVoid TryRegisterAsync() { PlayerSelectionData[] psd = await tryRegisterAsync(); UI_PlayerSelection.Instance.Init(psd); gameObject.SetActive(false); } private async UniTask<PlayerSelectionData[]> tryRegisterAsync() { var email = _emailInput.text; var pass = _passwordInput.text; PlayerSelectionData[] psd = await CommsManager.Instance.CMD_TryRegisterAsync(email, pass); return psd; }
Is this correct? I want to wait for Server (via CommsManager) to reply with
PlayerSelectionData[]
PlayerSelectionData[]
, after receiving that, I want to call
UI_PlayerSelection.Instance.Init(psd);
UI_PlayerSelection.Instance.Init(psd);
BTW, UniTask is pretty much the same as C# Tasks, just a different keyword for example
async void == async UniTaskVoid
async void == async UniTaskVoid
.
CommsManager (method just for testing):
public async UniTask<PlayerSelectionData[]> CMD_TryRegisterAsync(string email, string pass) { await UniTask.Delay(1000); var psd1 = new PlayerSelectionData("Player_1", 3); var psd2 = new PlayerSelectionData("Player_2", 10); return new PlayerSelectionData[] { psd1, psd2 }; }
public async UniTask<PlayerSelectionData[]> CMD_TryRegisterAsync(string email, string pass) { await UniTask.Delay(1000); var psd1 = new PlayerSelectionData("Player_1", 3); var psd2 = new PlayerSelectionData("Player_2", 10); return new PlayerSelectionData[] { psd1, psd2 }; }
This seems to work... But I heard its incorrect, see replies below. Thanks