当前位置:  开发笔记 > 编程语言 > 正文

等待任务并静默停止取消或失败

如何解决《等待任务并静默停止取消或失败》经验,为你挑选了1个好方法。

我想写的是以下内容:

async void Foo()
{
    var result = await GetMyTask().IgnoreCancelAndFailure();
    ProcessResult(result);
}

代替:

void Foo()
{
    GetMyTask().ContinueWith(task => ProcessResult(task.Result),
        TaskContinuationOptions.OnlyOnRanToCompletion);
}

但是我不知道如何实现IgnoreCancelAndFailure方法,它具有以下签名:

//On cancel or failure this task should simply stop and never complete.
Task IgnoreCancelAndFailure(this Task task) 
{
     throw new NotImplementedException(); 
}

如果可能,我应该如何实现IgnoreCancelAndFailure?



1> Thomas Leves..:

您可以执行类似的操作,但是您需要知道在失败的情况下您希望方法返回什么,因为需要返回值:

public static async Task IgnoreCancelAndFailure(this Task task) 
{
     try
     {
         return await task;
     }
     catch
     {
         return ???; // whatever you want to return in this case
     }
}

如果它是Task没有结果的,只需catch留空(或者可能记录异常...吞下异常使硬调试)

如果您只想ProcessResultGetMyTask成功时执行,则可以执行以下操作:

async void Foo()
{
    try
    {
        var result = await GetMyTask();
        ProcessResult(result);
    }
    catch(Exception ex)
    {
        // handle the exception somehow, or ignore it (not recommended)
    }
}

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有