从任务中获取结果

时间:2018-04-10 12:00:09

标签: 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;
}

当我打电话时,这很有效:

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

    // more code
}

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

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

    if(result == true)
        doSomething();
}

这给了我一个错误:Await task returns no value 但我的印象是我返回了一些东西。

1 个答案:

答案 0 :(得分:5)

public Task ShowWindow更改为public Task<bool> ShowWindow; Taskasync相当于void; Task<T>是返回async的方法的T等价物。

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