C# 在catch块中调用异步方法

C# 在catch块中调用异步方法,c#,.net,silverlight,async-await,C#,.net,Silverlight,Async Await,我在异步环境(Silverlight)中工作,并使用记录器服务在服务器端存储异常 考虑以下代码: catch (Exception ex) { this.loggerService.LogAsync(ex, "NotesService"); } 记录器如下所示: public interface ILoggerService { Task LogAsync(Exception ex, string tag); } 若我像

我在异步环境(Silverlight)中工作,并使用记录器服务在服务器端存储异常

考虑以下代码:

    catch (Exception ex)
    {
        this.loggerService.LogAsync(ex, "NotesService");
    }
记录器如下所示:

public interface ILoggerService
    {
        Task LogAsync(Exception ex, string tag);
    }
若我像上面那个样写代码(即使catch是在异步方法中),我就不能把wait放在那个里。 如果我保持原样,我会得到继续执行的警告,诸如此类。没关系,我不在乎。我只需要把错误记录下来


我是否可以取消此警告,或者我是否应该为此提供更好的模式?

由于您绝对确定要忽略来自
LogAsync
的完成/错误,您可以执行以下简单的解决方法:

catch (Exception ex)
{
    var _ = this.loggerService.LogAsync(ex, "NotesService");
}

如果
LogAsync
完全失败,您想做什么?您可能希望有一个备份计划来观察错误的任务。@ JONSKET我以“吃”异常的方式对LogASYNC进行编码,这是最后一个选择。@ KATTT:在这种情况下,您可能需要考虑将返回类型更改为<代码> Value>代码>。这很少是一个好主意,但是如果你真的想让它完全“开火并忘记”的话,它会起作用。我越是了解这种模式,越是看到“异步方式”是多么自然地成为必需——似乎top方法几乎总是无效的:(@katit,如果你在GUI环境中(比如Silverlight)最上面的方法是一个事件处理程序,那么是的。如果使用
async void
确实是正确的,那么这是唯一一种不需要费劲思考的情况。