使用Microsoft Bot Framework(C#)开发聊天机器人遇参数异常:options不能为取消令牌
问题排查与解决:options cannot be a cancellation token
报错原因
你调用的BeginDialogAsync方法存在参数传参错误。该方法的标准重载签名为:
Task<DialogTurnResult> BeginDialogAsync(string dialogId, object options = null, CancellationToken cancellationToken = default);
你当前将cancellationToken直接传入了第二个参数位(该位置应为对话框初始化用的options参数),框架会把取消令牌误判为初始化选项对象,从而抛出options cannot be a cancellation token错误。
修正代码
如果无需给对话框传递初始化参数,只需将第二个参数设为null,把cancellationToken放在第三个参数位:
var dialogCtx = await dialogs.CreateContextAsync(turnContext, cancellationToken); if (dialogCtx.ActiveDialog == null) { await dialogCtx.BeginDialogAsync(MainDialog.Id, null, cancellationToken); }
如果需要传递初始化参数(比如自定义配置数据),则先构造参数对象再传入:
// 示例:自定义初始化参数类 public class MainDialogOptions { public string InitialPrompt { get; set; } } // 调用时传入参数 var dialogCtx = await dialogs.CreateContextAsync(turnContext, cancellationToken); if (dialogCtx.ActiveDialog == null) { var initialOptions = new MainDialogOptions { InitialPrompt = "欢迎使用对话机器人!" }; await dialogCtx.BeginDialogAsync(MainDialog.Id, initialOptions, cancellationToken); }
内容的提问来源于stack exchange,提问作者hamzahjazi98
相关产品推荐
相关产品推荐

