我是Microsoft bot开发的新手,因此我开始使用该公司在Github上发布的示例。 我注意到一些示例在对话框类中禁用了警告:
#pragma warning disable 1998
如果我删除该行,我得到了预期的消息“async方法缺少'等待'运算符并将同步运行...”这是正常的,因为示例通常包含方法调用,如context.Wait(this.MessageReceivedAsync);
,其中MessageReceivedAsync( )是一种异步方法。
我了解到抑制警告不是一个好方法,解决警告的原因会更好。我有一种感觉,我不知怎的错过了这里。我想理解为什么开发人员选择在这里使用禁用警告而不是找到另一种实现方式的概念?如果我开发类似的应用程序,我应该这样做吗?
答案 0 :(得分:1)
由于此方法会在您的样本中引发警告,因此发出此警告:
public async Task StartAsync(IDialogContext context)
{
context.Wait(this.MessageReceivedAsync);
}
正如您所看到的,此方法为async
,但内部没有等待的呼叫,因此警告。
当您尝试修复此问题时,问题是这个StartAsync
是Bot Framework的IDialog
接口的实现,here:
public interface IDialog<out TResult>
{
/// <summary>
/// The start of the code that represents the conversational dialog.
/// </summary>
/// <param name="context">The dialog context.</param>
/// <returns>A task that represents the dialog start.</returns>
Task StartAsync(IDialogContext context);
}
正如您所看到的,StartAsync
方法是为异步行为声明的。