我想要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
但我的印象是我我返回了一些东西。
答案 0 :(得分:5)
将public Task ShowWindow
更改为public Task<bool> ShowWindow
; Task
是async
相当于void
; Task<T>
是返回async
的方法的T
等价物。
但是,此处看起来并不是真正的async
代码;看起来ShowWindow
将在调用线程上运行完成,这可能会使Task
(有或没有<T>
)冗余。