【问题标题】:IQueryable<T> and async/await [duplicate]IQueryable<T> 和 async/await [重复]
【发布时间】:2014-12-02 17:01:08
【问题描述】:

让我们举一个非常简单的例子。这有什么区别:

var sublist = Task.WhenAll(list.Select(x => x.getYAsync()));

还有这个:

var sublist = Task.WhenAll(list.Select(async x => await x.getYAsync()));

在这两种情况下,sublist 的类型是相同的,所以唯一的区别是语义。一个比另一个表现更好吗?一个比另一个更标准吗?

【问题讨论】:

    标签: c# asynchronous async-await iqueryable


    【解决方案1】:

    唯一显着的区别在于异常传播。

    如果getYAsync 抛出一个未存储在返回任务中的异常*,则第一个选项在调用Task.WhenAll 时会出现异常,而第二个选项会将异常存储在从Task.WhenAll 返回的任务中等待该任务时将被抛出。

    除此之外,在 async lambda 中构建的状态机有一些(非常小的)开销。

    第一个选项的性能更好,而第二个比另一个更标准。 更安全的选择是明确声明 asyncawait,但在这种简单的情况下,它有些多余。

    * 例如:Task getYAsync() { throw new Exception(); return Task.Delay(1)}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 2019-03-04
      • 2018-10-29
      • 2014-09-25
      • 2021-09-26
      • 2019-03-13
      • 1970-01-01
      相关资源
      最近更新 更多