private RunAsyncOptions GetRunAsycOptions(DispatchThreadServerRequest request) { RunAsyncOptions options = default(RunAsyncOptions); if (request.RunOnSequentialQueue) { options |= RunAsyncOptions.RunOnSequentialQueue; } return(options); }
public void RunAsync(TypedRequest request, RunAsyncOptions options, Action <TypedResponse> successCallback, Action <ErrorResponse> errorCallback) { // Note: We capture the value outside the RunAsync callback. var localSequenceNumber = Interlocked.Increment(ref _currentSequenceNumber); RunAsyncWorker(request, options, successCallback, errorCallback, localSequenceNumber, response => { lock (_lock) { _bufferedResponses.Add(response); } OnResponseReceived(); }); }
public void RunAsyncWorker(TypedRequest request, RunAsyncOptions options, Action <TypedResponse> successCallback, Action <ErrorResponse> errorCallback, long sequenceNumber, Action <BufferedResponse> processResponse) { var sw = Stopwatch.StartNew(); var ipcRequest = new IpcRequest { RequestId = _ipcRequestIdFactory.GetNextId(), Protocol = IpcProtocols.TypedMessage, RunOnSequentialQueue = (options & RunAsyncOptions.RunOnSequentialQueue) != 0, Data = request }; _serverProcessProxy.RunAsync(ipcRequest, ipcResponse => { var response = new BufferedResponse { SequenceNumber = sequenceNumber, IpcRequest = ipcRequest, IpcResponse = ipcResponse, SuccessCallback = successCallback, ErrorCallback = errorCallback, Elapsed = sw.Elapsed }; processResponse(response); }); }
public void RunUnbufferedAsync(TypedRequest request, RunAsyncOptions options, Action <TypedResponse> successCallback, Action <ErrorResponse> errorCallback) { RunAsyncWorker(request, options, successCallback, errorCallback, -1, SendResponse); }