【问题标题】:Noop for Func<Task>? [duplicate]为 Func<Task> 打盹? [复制]
【发布时间】:2019-08-11 18:11:19
【问题描述】:

有一个功能

async Task MyFuncation(Func<Task> f)
{
    // do something
    //
    await f();
}

有时我需要调用函数但没有任何参数f,所以我将它传递给async () =&gt; { }。有noop功能吗?

await RunMyFuncation(async () => { }); // I still need to call Run

【问题讨论】:

  • 可以修改方法吗?
  • @TaW 一个用于语法错误,一个用于 noop 引用。她们不一样。另一个被删除了。
  • @RufusL 是的,我可以。
  • 在这种情况下,您可以将参数设为可选,并在尝试执行方法之前对方法内部进行null 检查:async Task Run(Func&lt;Task&gt; f = null) { if (f != null) await f(); },然后像这样调用它:await Run();

标签: c#


【解决方案1】:

您要查找的 noop 是 Task.CompletedTask

获取已经成功完成的任务。

但是,您仍然需要传递 lambda,因为该方法需要 Func&lt;T&gt; 而不是 Task 作为参数。

await Run(() => Task.CompletedTask);

这可能与您建议的使用空块没有什么不同。

【讨论】:

  • 有趣的是,我的 Visual Studio 在输入 Task. 后无法提示 CompletedTask
  • @Dai,我还是要打电话给Run()。我只是对fRun() 的参数一无所知。
  • @Dai Run 在包含代码的用户定义方法中。也许你把它和Task.Run混淆了。
  • @RufusL Run 是返回任务的用户定义方法。你绝对可以使用await来等待方法完成。
  • @RufusL 我们不知道该方法是否在异步方法中被调用,我假设它是,所以我在它之前添加了等待。也修复了错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多