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

Mas*_*ver 3 c# func nullreferenceexception task-parallel-library async-await

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

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

    await (funcWithTask != null ? funcWithTask.Invoke() : Task.CompletedTask);
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*lay 6

有没有办法使这样一个委托的调用更简单,如下所示?

有替代方案:

if (funcWithTask != null) await funcWithTask();
Run Code Online (Sandbox Code Playgroud)

或者:

await (funcWithTask?.Invoke() ?? Task.CompletedTask);
Run Code Online (Sandbox Code Playgroud)

第二个使用空条件运算符 ?.,它只Invoke()funcWithTask不为空时调用,以及空合并运算符 ??,当左手操作数为空时返回右手操作数(Task.CompletedTask在这种情况下)。