Exemple #1
0
        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));
        }