public Task<IClientResponse> ProcessRequest(string url, Action<IClientRequest> prepareRequest, Dictionary<string, string> postData) { var uri = new Uri(url); PersistentConnection connection; if (!_shutDownToken.IsCancellationRequested && TryGetConnection(uri.LocalPath, out connection)) { var tcs = new TaskCompletionSource<IClientResponse>(); var clientTokenSource = new CancellationTokenSource(); var request = new Request(uri, clientTokenSource, postData, User); prepareRequest(request); Response response = null; response = new Response(clientTokenSource.Token, () => tcs.TrySetResult(response)); var hostContext = new HostContext(request, response); hostContext.Items[HostConstants.ShutdownToken] = _shutDownToken.Token; connection.Initialize(DependencyResolver, hostContext); connection.ProcessRequestAsync(hostContext).ContinueWith(task => { if (task.IsFaulted) { tcs.TrySetException(task.Exception); } else if (task.IsCanceled) { tcs.TrySetCanceled(); } else { tcs.TrySetResult(response); } response.Close(); }); return tcs.Task; } return TaskAsyncHelper.FromError<IClientResponse>(new InvalidOperationException("Not a valid end point")); }