/// <summary> /// Starts the child workflow, returning an <see cref="IAsyncFuture"/> that can be used /// to wait for the workflow to complete. This version doesn't return a workflow result. /// </summary> /// <param name="args">The workflow arguments.</param> /// <returns>An <see cref="ChildWorkflowFuture"/> that can be used to retrieve the workflow result as an <c>object</c>.</returns> /// <exception cref="InvalidOperationException">Thrown if the child workflow has already been started.</exception> /// <remarks> /// <note> /// <b>IMPORTANT:</b> You need to take care to ensure that the parameters passed /// are compatible with the target workflow arguments. /// </note> /// </remarks> public async Task <ChildWorkflowFuture> StartAsync(params object[] args) { await SyncContext.Clear; Covenant.Requires <ArgumentNullException>(args != null, nameof(args)); if (childExecution != null) { throw new InvalidOperationException("Cannot start a future stub more than once."); } childExecution = await client.StartChildWorkflowAsync(parentWorkflow, WorkflowTypeName, CadenceHelper.ArgsToBytes(client.DataConverter, args), Options); // Create and return the future. return(new ChildWorkflowFuture(parentWorkflow, childExecution)); }