protected IEnumerator Start() { ProgressTask <float, string> task = new ProgressTask <float, string>(new System.Func <IProgressPromise <float, string>, IEnumerator>(DoTask), true); /* Start the task */ task.OnPreExecute(() => { Debug.Log("The task has started."); }).OnPostExecute((result) => { Debug.LogFormat("The task has completed. result:{0}", result);/* only execute successfully */ }).OnProgressUpdate((progress) => { Debug.LogFormat("The current progress:{0}%", (int)(progress * 100)); }).OnError((e) => { Debug.LogFormat("An error occurred:{0}", e); }).OnFinish(() => { Debug.Log("The task has been finished.");/* completed or error or canceled*/ }).Start(); // /* Cancel the task in three seconds.*/ // this.StartCoroutine (DoCancel (task)); /* wait for the task finished. */ yield return(task.WaitForDone()); Debug.LogFormat("IsDone:{0} IsCanceled:{1} Exception:{2}", task.IsDone, task.IsCancelled, task.Exception); }