在异步功能中,为什么我必须等待?

DJL

说我有这样的方法:

private async Task SomeMethod()
{
  await DoSomethingAsync();
  await DoSomethingElseAsync();
  return;
}

鉴于DoSomethingElseAsync返回a Task,看来您应该能够做到这一点:

private async Task SomeMethod()
{
  await DoSomethingAsync();
  return DoSomethingElseAsync();
}

但是编译器对此抱怨:

由于' SomeMethod'是返回' Task'的异步方法,因此return关键字后不能包含对象表达式。您打算返回' Task<T>'吗?

这是为什么?

卡泽姆·阿赫加里

它很像是如何yield returnreturn作品。对于迭代器,您可以使用以下两种方法之一

public IEnumerable<int> SomeIterator()
{
    for(int I = 0; I < 10; I++) yield return I;
}

public IEnumerable<int> SomeIterator()
{
    return Enumerable.Range(0, 10); // return result of another iterator.
}

但是你不能两者兼得。它不起作用,因为迭代器要么由编译器转换为类以使用来处理延迟迭代yield,要么就像其他返回其他内容的常规方法一样。

public IEnumerable<int> SomeIterator() // not valid
{
    for(int I = 0; I < 10; I++) yield return I;
    return Enumerable.Range(0, 10); 
}

这个故事return和和一样async/await对于返回类型为TaskreturnTask或use的方法async/await

因为Task<T>如果您使用await,则必须返回,TTask<T>由于方法已编译到状态机中而无法返回,因此方法必须返回T(因为Task方法无效)

如果不使用async/awaitmethod,则将与其他常规方法完全一样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们必须等待C#中的异步方法调用

来自分类Mysql

为什么我在bcrypt比较时出错?异步/等待功能

来自分类Dev

为什么我的异步/等待功能异常?(Javascript)

来自分类Dev

我必须等待已经异步的useEffect中的异步函数吗?

来自分类Dev

为什么在必须使用等待时使用异步?

来自分类Dev

为什么我的 await 在我的功能中不起作用?“语法错误:等待仅在异步函数中有效”

来自分类Dev

不明白为什么我的异步等待在我的 lambda 函数中不起作用

来自分类Dev

为什么我的代码在这个异步函数中没有等待输出?

来自分类Dev

Spring WebFlux-为什么我必须等待WebClient响应?

来自分类Dev

为什么我的异步等待无法正常工作

来自分类Dev

为什么我的异步函数不等待承诺的实现

来自分类Dev

为什么我必须使用await来使方法异步运行。如果我不想等待方法完成再继续怎么办?

来自分类Dev

在tkinter中,为什么我必须分别使用“网格”功能?

来自分类Dev

为什么异步等待不等待 - nodejs

来自分类Dev

为什么我的异步等待不等待我的web3.js sendRawTransaction?

来自分类Dev

为什么异步/等待不异步运行?

来自分类Dev

为什么我无法在异步瀑布功能中更新Node客户端会话?

来自分类Dev

为什么将await *从异步/等待建议中删除?

来自分类Dev

为什么异步等待代码中的陷阱没有触发?

来自分类Dev

JS 承诺:为什么 await 必须在异步函数中?

来自分类Dev

因为我不能在顶层运行 await,我必须把它放到一个异步函数中——为什么我可以直接调用那个异步函数?

来自分类Dev

为什么我必须双击才能激活jquery功能?

来自分类Dev

为什么我的异步mongodb查询功能挂了?

来自分类Dev

为什么我的异步方法不等待“ serialPort =等待SerialDevice.FromIdAsync()”?

来自分类Dev

为什么异步/等待在我的ASP.net 5控制台应用程序中不起作用?

来自分类Dev

JS异步/等待-为什么等待需要异步?

来自分类Dev

Node.js为什么等待仅限于异步功能?

来自分类Dev

为什么javascript异步功能不等待firebase.auth方法完成?

来自分类Dev

为什么异步等待任务中的同步代码比异步代码慢得多

Related 相关文章

  1. 1

    为什么我们必须等待C#中的异步方法调用

  2. 2

    为什么我在bcrypt比较时出错?异步/等待功能

  3. 3

    为什么我的异步/等待功能异常?(Javascript)

  4. 4

    我必须等待已经异步的useEffect中的异步函数吗?

  5. 5

    为什么在必须使用等待时使用异步?

  6. 6

    为什么我的 await 在我的功能中不起作用?“语法错误:等待仅在异步函数中有效”

  7. 7

    不明白为什么我的异步等待在我的 lambda 函数中不起作用

  8. 8

    为什么我的代码在这个异步函数中没有等待输出?

  9. 9

    Spring WebFlux-为什么我必须等待WebClient响应?

  10. 10

    为什么我的异步等待无法正常工作

  11. 11

    为什么我的异步函数不等待承诺的实现

  12. 12

    为什么我必须使用await来使方法异步运行。如果我不想等待方法完成再继续怎么办?

  13. 13

    在tkinter中,为什么我必须分别使用“网格”功能?

  14. 14

    为什么异步等待不等待 - nodejs

  15. 15

    为什么我的异步等待不等待我的web3.js sendRawTransaction?

  16. 16

    为什么异步/等待不异步运行?

  17. 17

    为什么我无法在异步瀑布功能中更新Node客户端会话?

  18. 18

    为什么将await *从异步/等待建议中删除?

  19. 19

    为什么异步等待代码中的陷阱没有触发?

  20. 20

    JS 承诺:为什么 await 必须在异步函数中?

  21. 21

    因为我不能在顶层运行 await,我必须把它放到一个异步函数中——为什么我可以直接调用那个异步函数?

  22. 22

    为什么我必须双击才能激活jquery功能?

  23. 23

    为什么我的异步mongodb查询功能挂了?

  24. 24

    为什么我的异步方法不等待“ serialPort =等待SerialDevice.FromIdAsync()”?

  25. 25

    为什么异步/等待在我的ASP.net 5控制台应用程序中不起作用?

  26. 26

    JS异步/等待-为什么等待需要异步?

  27. 27

    Node.js为什么等待仅限于异步功能?

  28. 28

    为什么javascript异步功能不等待firebase.auth方法完成?

  29. 29

    为什么异步等待任务中的同步代码比异步代码慢得多

热门标签

归档