我使用async/await
Task
来避免wpf UI被阻止并使我的应用程序更具响应性。以下是我在应用程序中应用async/await
的方法:
private async void Button1_Click(object sender, RoutedEventArgs e)
{
.......
try
{
await Task.Run(() =>
{
......
});
}
catch (Exception ex)
{
......
}
}
如果在Task
执行中返回错误,是否需要停止/取消catch
?如果'任务'成功运行没有错误或任何异常被捕获,我是否仍需要在我的应用程序中的其他位置停止/取消Task
?
答案 0 :(得分:2)
如果您在catch
块中,则任务已经停止执行。
答案 1 :(得分:2)
如果在catch执行中返回错误,是否需要停止/取消任务?
CancellationTokenSource
停止/取消,如果绝对需要作为显式操作(逻辑的一部分),而不是异常/成功运行,它们都将传播回调用者。在这种情况下,它实际上可以使用void,是async button click event
,因为UI知道如何处理异常,如果它传播
但是,请了解您的代码的另一个方面,如下:
await Task.Run(() =>
{
......
});
将在Async
上启动ThreadPool thread
调用,现在您无法使用它来更新任何需要在InvalidOperationException
上执行的UI控件。 UI线程,standard synchronization context
调用的Async
答案 2 :(得分:2)
如果'任务'运行成功没有错误或任何异常被捕获,我还需要在我的应用程序的其他地方停止/取消任务吗?
任务只完成一次。
如果已经完成(成功或有例外),则无法取消。