using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; using UniRx.Async; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class SandboxMain : MonoBehaviour { public Button okButton; public Button cancelButton; public Text text; CancellationTokenSource cts; UniTaskCompletionSource ucs; void Start() { // Setup unobserverd tskexception handling TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; // Optional: disable ExecutionContext if you don't use AsyncLocal. //if (!ExecutionContext.IsFlowSuppressed()) //{ // ExecutionContext.SuppressFlow(); //} //// Optional: disable SynchronizationContext(to boostup performance) if you completely use UniTask only //SynchronizationContext.SetSynchronizationContext(null); // ----- Application.logMessageReceived += Application_logMessageReceived; ucs = new UniTaskCompletionSource(); okButton.onClick.AddListener(async () => { await InnerAsync(false); }); cancelButton.onClick.AddListener(async () => { text.text = ""; ucs.SetResult(); await ucs.Task; }); } private void Application_logMessageReceived(string condition, string stackTrace, LogType type) { text.text += "\n" + condition; } async UniTask OuterAsync(bool b) { UnityEngine.Debug.Log("START OUTER"); await InnerAsync(b); await InnerAsync(b); UnityEngine.Debug.Log("END OUTER"); // throw new InvalidOperationException("NAZO ERROR!?"); // error!? } async UniTask InnerAsync(bool b) { if (b) { UnityEngine.Debug.Log("Start delay:" + Time.frameCount); await UniTask.DelayFrame(60); UnityEngine.Debug.Log("End delay:" + Time.frameCount); await UniTask.DelayFrame(60); UnityEngine.Debug.Log("Onemore end delay:" + Time.frameCount); } else { UnityEngine.Debug.Log("Empty END"); throw new InvalidOperationException("FOOBARBAZ"); } } private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) { // e.SetObserved(); // or other custom write code. UnityEngine.Debug.LogError("Unobserved:" + e.Exception.ToString()); } }