从任务中获取结果

Sir*_*eli -2 c# wpf

我有以下Task我想要的await

public Task ShowWindow<TWindow>(TWindow window) where TWindow : Window
{
    var task = new TaskCompletionSource<bool>();
    window.Owner = Application.Current.MainWindow;
    window.ShowDialog();
    task.SetResult(window.DialogResult ?? false);
    window.Focus();
    return task.Task;
}
Run Code Online (Sandbox Code Playgroud)

当我调用它时,这非常有效:

private async void SettingsButton_Click(object sender, RoutedEventArgs e)
{
    await ShowWindow(new SettingsWindow());

    // more code
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能访问结果Task? 我想象下面的东西,但显然我错过了一些东西:

private async void SettingsButton_Click(object sender, RoutedEventArgs e)
{
    bool result = await ShowWindow(new SettingsWindow());

    if(result == true)
        doSomething();
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误:Await task returns no value 但我的印象是我要归还一些东西.

Mar*_*ell 5

更改public Task ShowWindow到public Task<bool> ShowWindow; 一个Task是async等效void; 一个Task<T>是async一个返回方法的等效T.

但是,它看起来并不像这里有任何真正的async代码; 看起来它ShowWindow会在调用线程上运行完成,这可能会使Task(有或没有<T>)冗余.