取消继续任务链并向调用方报告错误

本文关键字:报告 错误 方报告 调用 任务 继续 取消 | 更新日期: 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上的示例代码似乎不起作用。

任何指针都会很棒

克里斯

取消继续任务链并向调用方报告错误

只是不要在这里使用ContinueWithawait要创建延续的每个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,允许调用方知道操作何时完成,能够确定它是否成功完成,如果出错,则查看异常。