public void Asynqueue_runs_when_queued() { var response = new TaskCompletionSource <string>(); var q = new Asynqueue <string>(s => response.SetResult("Hello, " + s)); q.Send("World"); response.Task.Wait(); var result = response.Task.Result; "Hello, World".ShouldEqual(result); }
public void Asynqueue_send_is_async() { var response = new TaskCompletionSource <int>(); var count = 0; var q = new Asynqueue <int>(async i => { await Task.Delay(10); response.SetResult(Interlocked.Increment(ref count)); }); q.Send(1); Interlocked.Increment(ref count).ShouldEqual(1); response.Task.Wait(); response.Task.Result.ShouldEqual(2); }
private static Task <long> BuffQueue() { const int NumMessages = 1000000; var countdown = new CountdownEvent(NumMessages); Stopwatch w = Stopwatch.StartNew(); var qout = new Asynqueue <string>(_ => { countdown.Signal(); }); for (var x = 0; x < NumMessages; ++x) { qout.Send("Msg " + x); } countdown.Wait(); return(Task.FromResult(w.ElapsedMilliseconds)); }
/// <summary> /// Demonstrate the performance of the plain messenger. /// </summary> private static async Task <long> PlainQueue() { const int NumMessages = 1000000; var done = new TaskCompletionSource <long>(); var count = 0; Stopwatch w = Stopwatch.StartNew(); var qout = new Asynqueue <string>(_ => { if (++count >= NumMessages) { done.SetResult(w.ElapsedMilliseconds); } }); for (var x = 0; x < NumMessages; ++x) { qout.Send("Msg " + x); } return(await done.Task); }