当前位置: 首页 > 知识库问答 >
问题:

在C#中,返回异步task和task的方法有什么不同?[关闭]

司徒云
2023-03-14

我是C#异步编程的新手。总的来说,我理解异步编程的概念,但我并没有完全理解所有的细节,所以我有了这个问题。

        public async Task<int> Action1()
        {
          // ...
        }

        public Task<int> Action2()
        {
          // ...
        }

编辑:这段代码有意义吗:

    public async Task Action1()
    {
      await someAsyncMethod(); // do nothing with result
    }

    public Task Action2()
    {
      return Action1()
    }

共有1个答案

龚威
2023-03-14

我喜欢这样想:

>

  • 关键字Async不修改返回类型。返回类型是如果缺少Async:Task

    关键字Async告诉编译器重写方法的实现,使其异步。在幕后,编译器将把方法转换成状态机,以便异步操作。这也是await工作的唯一方法。

    .method public hidebysig 
        instance class [System.Private.CoreLib]System.Threading.Tasks.Task`1<int32> Action1 () cil managed 
    
    .method public hidebysig 
        instance class [System.Private.CoreLib]System.Threading.Tasks.Task`1<int32> Action2 () cil managed 
    

    不过,还有几个问题/答案试图比我更好地解决这个问题:

    • 如何以及何时使用'async'和'await'
    • 在C#中“return await”的目的是什么?
    • 我们应该如何使用异步等待?

  •  类似资料:
    • 在Server程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢。 Swoole提供了异步任务处理的功能,可以投递一个异步任务到TaskWorker进程池中执行,不影响当前请求的处理速度。 程序代码 基于第一个TCP服务器,只需要增加onTask和onFinish 2个事件回调函数即可。另外需要设置task

    • 执行器服务具有以下方法: 将来的 但是,由于这个<code>未来</code>的<code>get</code>方法将始终返回<code>null</code>以下签名是否更合适? <代码>未来

    • null my Library的核心逻辑 客户将使用我们的库,他们将通过传递builder对象来调用它。然后,我们将通过使用对象构造一个URL,并通过执行该对象对该URL进行HTTP客户端调用,在将响应作为JSON字符串返回后,我们将通过创建对象将该JSON字符串按原样发送给客户。有些客户会调用,有些可能会调用方法,所以我需要在库中分别提供两个方法。 接口: 您将如何实现同步和异步方法给定上述标准

    • 问题内容: Java中的同步方法和同步块有什么区别? 我一直在网上搜索答案,人们似乎对此不太确定:-( 我的看法是,两者之间没有区别,只是synch块的作用域可能更多,因此锁定的时间更少了? 如果在静态方法上使用Lock,则采用什么Lock?班级锁是什么意思? 问题答案: 同步方法将方法接收器用作锁(即,用于非静态方法,而用于静态方法的封闭类)。 blocks将表达式用作锁。 因此,以下两种方法等

    • 问题内容: 可以说我们有以下两个示例代码: 还有这个 所以有人可以告诉我现在有什么区别吗? 问题答案: 这两种不同的方法在 功能上是等效的 。有 可能 是一个非常小的 性能 差异: 在字节码级别,作为方法访问标记中设置的位, 同步方法 公布其同步需求。JVM查找该位标志并进行适当同步。 该 同步块 通过存储在该方法的类文件中的字节码定义的操作序列实现其同步。 因此,同步方法 可能会以 更快的速度执

    • 问题内容: 我一直在对此进行一些研究,但至少可以说我还是很困惑。 谁能给我一个何时使用以及何时使用的具体示例;?到底有什么区别?何时使用这些方法是否有黄金法则? 如果我错了,也可以纠正我,但是这两个“对象”不是在GUI主线程内(用于更新GUI)创建另一个线程的方法吗? 问题答案: 使用快速和简单的操作和复杂的和大的操作。 用例 用例中的任务示例 示例:为什么我们不能用于长计算(摘自以下参考资料)。