ETVoid的Coroutine
ETVoid的 Coroutine
是消除波浪线 ( 编译器警告 )。 如下所示:

ETTask的Coroutine
无GC版本ETTask
- 无GC ETTask,其实是利用对象池,注意,必须小心使用。
- ETTask必须await或者调用Coroutine才能回收重用ETTaskCompletionSource。
ETTask不await,会报编译器警告。(跨程序集调用不会报警告),为了防止漏await或者Coroutine,在ET6工程中,设置了TreatwarningsAsErrors的设置(所有警告都变成错误)。
所有Warnning在编译时显示为Error
跨程序集调用不加Coroutine()
编译器不会报警告。举个栗子~
// 此扩展方法定义在 Unity.HotfixView 程序集
public static class UILoginComponentSystem
{
public static void OnLogin(this UILoginComponent self)
{
// 此处调用 Unity.Hotfix 程序集里的异步方法,去掉Coroutine也不会报警告。
LoginHelper.Login(....).Coroutine();
}
}
vs似乎比rider好一点(但仍有点问题):
http://www.cocoachina.com/articles/90776
异常捕获
某个会抛出异常的ETTask
调用了Coroutine()
,异常就不会往上抛了,会被ETVoid
抓住,然后打印,可以看看ETTask
的代码,里面有个log error


static async Task Main(string[] args)
{
try
{
// 这里调用了Coroutine不会捕捉到异常了
Test().Coroutine();
}
catch (Exception e)
{
// 不会运行到这里
}
Console.ReadKey();
}
static async ETTask<int> Test()
{
// 会被ETVoid捕获并调用LogError打印在日志里
throw new Exception();
}