You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UiPath自定义活动Async Task返回Tuple时OutArgument赋值报错如何解决

问题根因

该报错由异步活动的生命周期和闭包取值问题导致:ExecuteAsync方法执行完成后,原任务的上下文会被UiPath工作流运行时回收,你在返回的委托中直接访问外层task.Result时,已经无法正确读取到之前返回的Tuple类型结果,出现类型错位,触发类型不匹配的运行时错误。

修复方案

在await任务后将结果存入局部变量,再在返回的委托中使用该局部变量为输出参数赋值即可,修改后的ExecuteAsync代码如下:

protected override async Task<Action<AsyncCodeActivityContext>> ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken)
{
    // Set a timeout on the execution
    var task = ExecuteWithTimeout(context, cancellationToken);
    Tuple<bool, SshClient, string> executionResult;
    if (await Task.WhenAny(task, Task.Delay(TimeoutMS.Get(context), cancellationToken)) == task)
    {
        // 将任务结果存入局部变量,避免后续闭包访问失效
        executionResult = await task;
    }
    else
    {
        throw new TimeoutException(Resources.Timeout_Error);
    }

    // Outputs
    return (ctx) => {
        Connected.Set(ctx, executionResult.Item1);
        BaanConnection.Set(ctx, executionResult.Item2);
        Message.Set(ctx, executionResult.Item3);
    };
} 

可选优化

如果你的项目使用C# 7及以上版本,可以将返回的Tuple替换为ValueTuple,使用自定义字段名代替.Item1、.Item2这类可读性较差的写法,降低后续维护成本。


内容的提问来源于stack exchange,提问作者user2157598

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:36:02