我有以下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
但我的印象是我要归还一些东西.
更改public Task ShowWindow到public Task<bool> ShowWindow; 一个Task是async等效void; 一个Task<T>是async一个返回方法的等效T.
但是,它看起来并不像这里有任何真正的async代码; 看起来它ShowWindow会在调用线程上运行完成,这可能会使Task(有或没有<T>)冗余.