Ver Fonte

增加针对Unity AsyncOperation的GetAwaiter方法,可以直接对AsyncOperation进行await了

tanghai há 3 anos atrás
pai
commit
8b61f908ae
1 ficheiros alterados com 31 adições e 0 exclusões
  1. 31 0
      Unity/Assets/Scripts/Mono/Helper/CoroutineHelper.cs

+ 31 - 0
Unity/Assets/Scripts/Mono/Helper/CoroutineHelper.cs

@@ -0,0 +1,31 @@
+using System;
+using UnityEngine;
+using UnityEngine.Networking;
+
+namespace ET
+{
+    public static class CoroutineHelper
+    {
+        // 有了这个方法,就可以直接await Unity的AsyncOperation了
+        public static async ETTask GetAwaiter(this AsyncOperation asyncOperation)
+        {
+            ETTask task = ETTask.Create(true);
+            asyncOperation.completed += _ => { task.SetResult(); };
+            await task;
+        }
+        
+        public static async ETTask<string> HttpGet(string link)
+        {
+            try
+            {
+                UnityWebRequest req = UnityWebRequest.Get(link);
+                await req.SendWebRequest();
+                return req.downloadHandler.text;
+            }
+            catch (Exception e)
+            {
+                throw new Exception($"http request fail: {link.Substring(0,link.IndexOf('?'))}\n{e}");
+            }
+        }
+    }
+}