如何在异步函数c#UWP的末尾启动函数

如何在异步函数c#UWP的末尾启动函数,c#,uwp,text-to-speech,C#,Uwp,Text To Speech,我在c#UWP中有一个简单的代码,其中使用Windows.Media.SpeechSynthesis类,应用程序合成第一个字符串,我的问题是在第一个合成完成后合成第二个字符串。我知道只生成包含str1+str2的字符串是可能的,但运行此代码的场景更复杂,这是不可能的。(对不起,我的英语水平低) 和往常一样,使用async方法返回void而不是Task或Task是个坏主意 返回任务时,只需添加一个带有以下内容的延续: 和往常一样,使用async方法返回void而不是Task或Task是个坏主意 返

我在c#UWP中有一个简单的代码,其中使用Windows.Media.SpeechSynthesis类,应用程序合成第一个字符串,我的问题是在第一个合成完成后合成第二个字符串。我知道只生成包含str1+str2的字符串是可能的,但运行此代码的场景更复杂,这是不可能的。(对不起,我的英语水平低)


和往常一样,使用
async
方法返回
void
而不是
Task
Task
是个坏主意
返回
任务时
,只需添加一个带有以下内容的延续:


和往常一样,使用
async
方法返回
void
而不是
Task
Task
是个坏主意
返回
任务时
,只需添加一个带有以下内容的延续:


使方法
talk
返回
Task
而不是
void

public MainPage()
{
    this.InitializeComponent();
    MakeTalk();
}

private async void MakeTalk()
{
    // Surround by a try catch as we have async void.
    string str1 = "weather data"; 
    await talk(Textmeteo);
    string str2 = "hello world";
    await talk(str2);
}

public async Task talk(string text)
{
   // [...]
}

使方法
talk
返回
Task
而不是
void

public MainPage()
{
    this.InitializeComponent();
    MakeTalk();
}

private async void MakeTalk()
{
    // Surround by a try catch as we have async void.
    string str1 = "weather data"; 
    await talk(Textmeteo);
    string str2 = "hello world";
    await talk(str2);
}

public async Task talk(string text)
{
   // [...]
}

请问如何使用:talkingTask=talkingTask.ContinueWith(completedTask=>talk(str2))@我就是这样。您的
async talk
方法返回一个
Task
(这是由编译器完成的),并且
ContinueWith
告诉它在上一个
操作完成后开始下一个
操作(参数)。因此,如果有10个字符串,那么
ContinueWith
应该重复10次?@AVK yes,或者可以这样做,这实际上(相当)是相同的。我高度怀疑波尔克杜兰的答案是否适用于这种情况。答案虽然在等待函数,但不希望作为任务返回任何值,因此它将跳转到下一行执行,并与字符串重叠。你的答案应该有用。请问如何使用:talkingTask=talkingTask.ContinueWith(completedTask=>talk(str2))@我就是这样。您的
async talk
方法返回一个
Task
(这是由编译器完成的),并且
ContinueWith
告诉它在上一个
操作完成后开始下一个
操作(参数)。因此,如果有10个字符串,那么
ContinueWith
应该重复10次?@AVK yes,或者可以这样做,这实际上(相当)是相同的。我高度怀疑波尔克杜兰的答案是否适用于这种情况。答案虽然在等待函数,但不希望作为任务返回任何值,因此它将跳转到下一行执行,并与字符串重叠。您的答案应该有效。为什么在您的场景中不可能使用
str1+str2
?@AVK,因为在第一个场景中,当str1被合成时,一个函数运行http请求以联机读取构成str2的数据。在第二个场景中,我需要一个数据,您指向第一个合成的结尾,因此我开始语音识别。为什么在您的场景中,
str1+str2
不可能?@AVK,因为在第一个场景中,当str1合成时,一个函数运行http请求来在线读取构成str2的数据。在第二个场景中,我需要一个数据,您可以指向第一次合成的末尾,这样我就开始语音识别。
public MainPage()
{
    this.InitializeComponent();
    MakeTalk();
}

private async void MakeTalk()
{
    // Surround by a try catch as we have async void.
    string str1 = "weather data"; 
    await talk(Textmeteo);
    string str2 = "hello world";
    await talk(str2);
}

public async Task talk(string text)
{
   // [...]
}