public async Task Run() { Console.WriteLine("*** test 1"); { StreamSink <string> s1 = Stream.CreateSink <string>(); TaskWithListener t1 = s1.ListenOnceAsync(t => t.ContinueWith(t2 => Console.WriteLine(t2.Result), TaskContinuationOptions.ExecuteSynchronously)); s1.Send("Early"); await Task.Delay(500); Console.WriteLine("Before await"); await t1; Console.WriteLine("After await"); } Console.WriteLine(); Console.WriteLine("*** test 2"); { StreamSink <string> s1 = Stream.CreateSink <string>(); TaskWithListener <string> t1 = s1.ListenOnceAsync(); s1.Send("Late"); await Task.Delay(500); Console.WriteLine("Before await"); Console.WriteLine(await t1); Console.WriteLine("After await"); } }
public async Task Run() { Console.WriteLine("*** Simple test"); { StreamSink <string> sa = Stream.CreateSink <string>(); StreamSink <string> sb = Stream.CreateSink <string>(); TaskWithListener <string> ta = sa.ListenOnceAsync(); TaskWithListener <string> tb = sb.ListenOnceAsync(); sa.Send("Hello"); sb.Send("World"); Console.WriteLine(await ta + " " + await tb); } Console.WriteLine(); Console.WriteLine("*** Simultaneous case"); { StreamSink <string> sa = Stream.CreateSink <string>(); StreamSink <string> sb = Stream.CreateSink <string>(); TaskWithListener <string> ta = sa.ListenOnceAsync(); TaskWithListener <string> tb = sb.ListenOnceAsync(); Transaction.RunVoid(() => { sa.Send("Hello"); sb.Send("World"); }); Console.WriteLine(await ta + " " + await tb); } }
public async Task TestListenOnceAsyncSameThread() { StreamSink <char> s = Stream.CreateSink <char>(); TaskWithListener <char> t = s.ListenOnceAsync(); s.Send('A'); s.Send('B'); s.Send('C'); char r = await t; Assert.AreEqual('A', r); }
public async Task TestListenOnceAsyncModify() { StreamSink <char> s = Stream.CreateSink <char>(); TaskWithListener <char> t = s.ListenOnceAsync(async t2 => await t2.ConfigureAwait(false)); GC.Collect(0, GCCollectionMode.Forced); s.Send('A'); s.Send('B'); s.Send('C'); char r = await t; Assert.AreEqual('A', r); }
public async Task TestListenOnceAsyncSameThreadWithCleanup() { StreamSink <char> s = Stream.CreateSink <char>(); TaskWithListener <char> t = s.ListenOnceAsync(); GC.Collect(0, GCCollectionMode.Forced); s.Send('A'); s.Send('B'); s.Send('C'); char r = await t; Assert.AreEqual('A', r); }
public async Task TestListenOnceAsyncModifyVoid2() { char r = ' '; StreamSink <char> s = Stream.CreateSink <char>(); TaskWithListener t = s.ListenOnceAsync(t2 => t2.ContinueWith(t3 => r = t3.Result, TaskContinuationOptions.ExecuteSynchronously)); GC.Collect(0, GCCollectionMode.Forced); s.Send('A'); s.Send('B'); s.Send('C'); await t; Assert.AreEqual('A', r); }
public async Task TestListenOnceAsync() { StreamSink <char> s = Stream.CreateSink <char>(); new Thread(() => { Thread.Sleep(250); s.Send('A'); s.Send('B'); s.Send('C'); }).Start(); char r = await s.ListenOnceAsync(); Assert.AreEqual('A', r); }
public async Task Run() { Console.WriteLine("*** test"); { StreamSink <string> s1 = Stream.CreateSink <string>(); TaskWithListener <string> t1 = s1.ListenOnceAsync(); new Thread(() => { s1.Send("Sent"); }).Start(); Console.WriteLine(await t1); } }