如何使用 await 简单安全地调用可为空的委托

问题描述

我的项目中有 func<Task> 个委托,可以为 null。有没有什么方法可以使这样一个委托的调用更简单,如下所示?

public async Task test()
{
    Func<Task> funcWithTask = null;

    await (funcWithTask != null ? funcWithTask.Invoke() : Task.CompletedTask);
}

解决方法

有没有什么方法可以使这样一个委托的调用更简单,如下所示?

还有其他选择:

if (funcWithTask != null) await funcWithTask();

或者:

await (funcWithTask?.Invoke() ?? Task.CompletedTask);

第二个使用 null-conditional operator ?.,它只在 Invoke() 不为空时调用 funcWithTask,而 null-coalescing operator ?? 返回当左侧操作数为空时的右侧操作数(在本例中为 Task.CompletedTask)。