取消继续任务链并向调用方报告错误
本文关键字:报告 错误 方报告 调用 任务 继续 取消 | 更新日期: 2023-09-27 18:31:26
如果我有一个需要执行多个任务的"登录"命令,并且我的代码如下所示
public async void LoginAsync()
{
await someService.Connect().ContinueWith(async (r) =>
{
//do some stuff with r.Result here
})
.ContinueWith(async (r) =>
{
//do some other stuff here
})
ContinueWith(async (r) =>
{
//do even more stuff here
});
沿着快乐的道路前进,代码按预期执行,一切都很好。
我的问题是,如果链中的一个任务出现问题/异常,如何取消剩余的任务并向调用方报告出了什么问题?
我尝试在 ContinueWith 语句中抛出异常,但我在调用方代码周围放置的 try/catch 块没有捕获这些异常。
我已经阅读了有关CancelTokenSource的信息,感觉它走在正确的轨道上,但是尝试在这种情况下实现MSDN上的示例代码似乎不起作用。
任何指针都会很棒
克里斯
只是不要在这里使用ContinueWith
。 await
要创建延续的每个Task
,因为这将为您提供所需的错误处理语义。
public async Task LoginAsync()
{
var result = await someService.Connect();
//do some stuff with r.Result here
//do some other stuff here
//do even more stuff here
}
另请注意,像这样的方法应该返回一个Task
,允许调用方知道操作何时完成,能够确定它是否成功完成,如果出错,则查看异常。