@@ -875,6 +875,76 @@ public void ShouldStopActorAndNotProcessAnyAlreadyEnqueuedWorkIfStartWorkCancell
875875 attempts . Should ( ) . Be ( 0 ) ;
876876 }
877877
878+ [ Fact ]
879+ public async Task ShouldBeAbleToPauseActorUntilResumeFromAwait ( )
880+ {
881+ var actor = CreateActor ( ) ;
882+ var numbers = new List < int > ( ) ;
883+
884+ await actor . Start ( ) ;
885+
886+ var tasks =
887+ new [ ]
888+ {
889+ actor . Enqueue (
890+ async ( ) =>
891+ {
892+ numbers . Add ( 1 ) ;
893+
894+ await Task . Delay ( TimeSpan . FromSeconds ( 1 ) ) . WhileActorPaused ( ) ;
895+
896+ numbers . Add ( 2 ) ;
897+ } ) ,
898+ actor . Enqueue ( ( ) => numbers . Add ( 3 ) ) ,
899+ actor . Enqueue ( ( ) => numbers . Add ( 4 ) ) ,
900+ actor . Enqueue ( ( ) => numbers . Add ( 5 ) )
901+ } ;
902+
903+ await Task . WhenAll ( tasks ) ;
904+
905+ numbers . Should ( ) . Equal ( 1 , 2 , 3 , 4 , 5 ) ;
906+ }
907+
908+ [ Fact ]
909+ public async Task ShouldBeAbleToPauseActorUntilResumeFromAwaitReturningData ( )
910+ {
911+ var actor = CreateActor ( ) ;
912+ var numbers = new List < int > ( ) ;
913+ var promise = new TaskCompletionSource < int > ( ) ;
914+
915+ await actor . Start ( ) ;
916+
917+ var tasks =
918+ new [ ]
919+ {
920+ actor . Enqueue (
921+ async ( ) =>
922+ {
923+ numbers . Add ( 1 ) ;
924+
925+ var next = await promise . Task . WhileActorPaused ( ) ;
926+
927+ numbers . Add ( next ) ;
928+ } ) ,
929+ actor . Enqueue ( ( ) => numbers . Add ( 3 ) ) ,
930+ actor . Enqueue ( ( ) => numbers . Add ( 4 ) ) ,
931+ actor . Enqueue ( ( ) => numbers . Add ( 5 ) )
932+ } ;
933+
934+ var promiseSetter =
935+ Task . Run (
936+ async ( ) =>
937+ {
938+ await Task . Delay ( TimeSpan . FromSeconds ( 1 ) ) ;
939+ promise . SetResult ( 2 ) ;
940+ } ) ;
941+
942+ await Task . WhenAll ( tasks ) ;
943+ await promiseSetter ;
944+
945+ numbers . Should ( ) . Equal ( 1 , 2 , 3 , 4 , 5 ) ;
946+ }
947+
878948 [ Flags ]
879949 private enum ActorCreateOptions
880950 {
0 commit comments