public void RequestManager_GetResponse_ReturnsResponse() { var d = new ConcurrentDictionary <Guid, TaskCompletionSource <ReceiveResponse> >(); var g = Guid.NewGuid(); var rm = new RequestManager(d); var resp = new ReceiveResponse(); Task.WaitAll( Task.Run(async() => { var r = await rm.GetResponseAsync(g, CancellationToken.None); Assert.IsTrue(resp.Equals(r)); }), Task.Run(() => { TaskCompletionSource <ReceiveResponse> value; while (!d.TryGetValue(g, out value)) { // Wait for a value; } value.SetResult(resp); })); }
public async Task RequestManager_SignalResponse_Response() { var d = new ConcurrentDictionary<Guid, TaskCompletionSource<ReceiveResponse>>(); var g = Guid.NewGuid(); var tcs = new TaskCompletionSource<ReceiveResponse>(); d.TryAdd(g, tcs); var rm = new RequestManager(d); var resp = new ReceiveResponse(); var r = await rm.SignalResponse(g, resp); Assert.IsTrue(resp.Equals(tcs.Task.Result)); }