@@ -30,23 +30,25 @@ public void DiscardedExecutionErrorDoesNotRootPayload(bool asynchronous, bool re
3030 [ MethodImpl ( MethodImplOptions . NoInlining ) ]
3131 static WeakReference FailExecution ( LuaState state , bool asynchronous , bool readMessage )
3232 {
33+ var suspension = new ManualSuspension ( ) ;
3334 var payload = new object ( ) ;
3435 state . Environment [ "payload" ] = LuaValue . FromObject ( payload ) ;
3536 state . Environment [ "pause" ] = new LuaFunction (
3637 async ( context , _ ) =>
3738 {
3839 if ( asynchronous )
39- await Task . Yield ( ) ;
40+ await suspension ;
4041 return context . Return ( ) ;
4142 }
4243 ) ;
4344 try
4445 {
45- state
46+ var operation = state
4647 . DoStringAsync ( "local value=payload;payload=nil;pause();error(value)" )
47- . AsTask ( )
48- . GetAwaiter ( )
49- . GetResult ( ) ;
48+ . AsTask ( ) ;
49+ if ( asynchronous )
50+ suspension . Resume ( ) ;
51+ operation . GetAwaiter ( ) . GetResult ( ) ;
5052 Assert . Fail ( "Expected a Lua error." ) ;
5153 }
5254 catch ( LuaRuntimeException exception )
@@ -68,22 +70,22 @@ public void DiscardedDirectCallErrorDoesNotRootPayload(bool asynchronous)
6870 [ MethodImpl ( MethodImplOptions . NoInlining ) ]
6971 static WeakReference FailDirectCall ( LuaState state , bool asynchronous )
7072 {
73+ var suspension = new ManualSuspension ( ) ;
7174 var payload = new object ( ) ;
7275 var function = new LuaFunction (
7376 async ( context , _ ) =>
7477 {
7578 if ( asynchronous )
76- await Task . Yield ( ) ;
79+ await suspension ;
7780 throw new LuaRuntimeException ( context . State , context . GetArgument ( 0 ) ) ;
7881 }
7982 ) ;
8083 try
8184 {
82- state
83- . CallAsync ( function , [ LuaValue . FromObject ( payload ) ] )
84- . AsTask ( )
85- . GetAwaiter ( )
86- . GetResult ( ) ;
85+ var operation = state . CallAsync ( function , [ LuaValue . FromObject ( payload ) ] ) . AsTask ( ) ;
86+ if ( asynchronous )
87+ suspension . Resume ( ) ;
88+ operation . GetAwaiter ( ) . GetResult ( ) ;
8789 Assert . Fail ( "Expected a Lua error." ) ;
8890 }
8991 catch ( LuaRuntimeException ) { }
@@ -101,6 +103,7 @@ public void DiscardedMetamethodErrorDoesNotRootCapturedPayload(bool asynchronous
101103 [ MethodImpl ( MethodImplOptions . NoInlining ) ]
102104 static WeakReference FailMetamethod ( LuaState state , bool asynchronous )
103105 {
106+ var suspension = new ManualSuspension ( ) ;
104107 var payload = new object ( ) ;
105108 var table = new LuaTable
106109 {
@@ -110,7 +113,7 @@ static WeakReference FailMetamethod(LuaState state, bool asynchronous)
110113 async ( context , _ ) =>
111114 {
112115 if ( asynchronous )
113- await Task . Yield ( ) ;
116+ await suspension ;
114117 GC . KeepAlive ( payload ) ;
115118 throw new LuaRuntimeException ( context . State , "failure" ) ;
116119 }
@@ -119,7 +122,10 @@ static WeakReference FailMetamethod(LuaState state, bool asynchronous)
119122 } ;
120123 try
121124 {
122- state . AddAsync ( table , 1 ) . AsTask ( ) . GetAwaiter ( ) . GetResult ( ) ;
125+ var operation = state . AddAsync ( table , 1 ) . AsTask ( ) ;
126+ if ( asynchronous )
127+ suspension . Resume ( ) ;
128+ operation . GetAwaiter ( ) . GetResult ( ) ;
123129 Assert . Fail ( "Expected a Lua error." ) ;
124130 }
125131 catch ( LuaRuntimeException ) { }
0 commit comments