private protected Task InvokeAsync(IObjectPrx prx, OutgoingRequestFrame request, IProgress <bool>?progress, CancellationToken cancel) { var completed = new IObjectPrx.InvokeTaskCompletionCallback(progress, cancel); new OutgoingAsync(prx, completed, request, oneway: prx.IsOneway).Invoke( request.Operation, request.Context, synchronous: false); return(ReadVoidReturnValueAsync(prx, completed.Task));
/// <summary>Sends a request asynchronously.</summary> /// <param name="proxy">The proxy for the target Ice object.</param> /// <param name="request">The outgoing request frame for this invocation. Usually this request frame should have /// been created using the same proxy, however some differences are acceptable, for example proxy can have /// different endpoints.</param> /// <param name="oneway">When true, the request is sent as a oneway request. When false, it is sent as a /// two-way request.</param> /// <param name="progress">Sent progress provider.</param> /// <param name="cancel">A cancellation token that receives the cancellation requests.</param> /// <returns>A task holding the response frame.</returns> public static Task <IncomingResponseFrame> InvokeAsync(this IObjectPrx proxy, OutgoingRequestFrame request, bool oneway = false, IProgress <bool>?progress = null, CancellationToken cancel = default) { var completed = new IObjectPrx.InvokeTaskCompletionCallback(progress, cancel); new OutgoingAsync(proxy, completed, request, oneway: oneway).Invoke(request.Operation, request.Context, synchronous: false); return(completed.Task); }