【发布时间】:2017-03-16 09:41:30
【问题描述】:
我似乎在使用 IAwaitable 时遇到了一些问题。我有以下对话框
[Serializable]
public class SearchDialog : IDialog<object>
{
private SpotifyClient _client;
public SearchDialog()
{
_client = new SpotifyClient();
}
public async Task StartAsync(IDialogContext context)
{
await context.PostAsync("Please enter the name of the artist");
context.Wait<string>(MessageReceived);
}
public async Task MessageReceived(IDialogContext context, IAwaitable<string> activity)
{
var message = await activity;
var results = await _client.SearchForArtistAsync(message);
if(results != null && results.Artists.Results.Any())
{
var artists = results.Artists.Results.Select(x => x.Name); // List<string>
PromptDialog.Choice(context,
ChoiceSelectAsync,
artists,
string.Empty,
"Didn't get that",
3,
PromptStyle.PerLine);
}
}
public async Task ChoiceSelectAsync(IDialogContext context, IAwaitable<string> choice)
{
var chosenArtist = await choice;
await context.PostAsync($"You have chosen {chosenArtist}");
context.Wait<string>(ChoiceSelectAsync);
}
}
问题是,提示对话框永远不会显示。 MessageReceived 方法似乎试图等待活动,但随后退出该方法。如果我使用 await 关键字,为什么它不等待结果?任何帮助将不胜感激。
【问题讨论】:
标签: c# botframework