microsoft bot Framework给出错误-'await'不能用作异步方法或lambda表达式中的标识符

时间:2017-11-22 09:12:05

标签: c# lambda botframework

我正在尝试创建一个聊天机器人并在此tutorial上翻滚。按照说明操作,它出错了

  

'await'不能用作async方法或lambda表达式中的标识符

我的完整.cs代码:

using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;

namespace chatbot.Dialogs
{
 [Serializable]
public class RootDialog : IDialog<object>
{
    public Task StartAsync(IDialogContext context)
    {
        context.Wait(MessageReceivedAsync);

        return Task.CompletedTask;
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {
        var activity = await result as Activity;

        // calculate something for us to return
        int length = (activity.Text ?? string.Empty).Length;

        // return our reply to the user
        await context.PostAsync($"You sent {activity.Text} which was {length} characters");

        context.Wait(MessageReceivedAsync);
    }
}
}

我是这个Bot应用程序的新手,所以如果我错过了什么,请告诉我。

由于

2 个答案:

答案 0 :(得分:1)

你需要把:

public async Task StartAsync(IDialogContext context)

取代

 public Task StartAsync(IDialogContext context)

并替换

return Task.CompletedTask;

它看起来像:

using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;

namespace chatbot.Dialogs
{
    [Serializable]
    public class RootDialog : IDialog<object>
    {
        public async Task StartAsync(IDialogContext context)
        {
            context.Wait(MessageReceivedAsync);


        }

        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
        {
            var activity = await result as Activity;

            // calculate something for us to return
            int length = (activity.Text ?? string.Empty).Length;

            // return our reply to the user
            await context.PostAsync($"You sent {activity.Text} which was {length} characters");

            context.Wait(MessageReceivedAsync);
        }
    }
}

如果需要更多帮助,请随时恢复

答案 1 :(得分:1)

您的代码看起来很完美,我不认为您的代码引发了该问题。我发现你推荐的教程是2016年后的,可能已经过时了。也许模板的结构/代码已经改变,这引发了你的问题。

请参阅https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-quickstart了解.Net的官方快速入门,并将及时更新。

目前,样本中的所有参考资料都是:

  <package id="Autofac" version="3.5.2" targetFramework="net46" />
  <package id="Chronic.Signed" version="0.3.2" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.Bot.Builder" version="3.11.0" targetFramework="net46" />
  <package id="Microsoft.Bot.Builder.CognitiveServices" version="1.1.1" targetFramework="net46" />
  <package id="Microsoft.Bot.Connector" version="3.11.1" targetFramework="net46" />
  <package id="Microsoft.IdentityModel.Protocol.Extensions" version="1.0.4.403061554" targetFramework="net46" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.2" targetFramework="net46" />
  <package id="Microsoft.WindowsAzure.ConfigurationManager" version="3.1.0" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="8.0.3" targetFramework="net46" />
  <package id="System.IdentityModel.Tokens.Jwt" version="4.0.4.403061554" targetFramework="net46" />