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

4.5 中的异步是否意味着只需输入函数即可启动新线程?

鲁英卫
2023-03-14

或者我必须在方法中使用任务。运行以确保每个函数都存在于自己的线程上?我试图看看我在我正在处理的代码中看到的这种做法是否有任何智慧。

public async Task<string> GetAStringAfterSyncProcessing(string processThis) {
       return await Task.Run(async () => { 
              var processThis2 = processThis + ",";
              var processThis3 = processThis2 + ",";
              var nowImDone = processThis3 + ",";
              return nowImDone;
       });
}

我有一种感觉,这是意外的设计,因为它使调试时不可能遍历每一行。因此,我想知道我是否正确地向其他人解释,异步自动意味着创建一个新的线程,以便只有在await或.GetAwaiter()时才调用该函数。使用GetResult()。谢谢

共有1个答案

巫健柏
2023-03-14

不,async本身不会创建新线程。

在你演示的代码中使用 async/await 是没有意义的。它主要等效于:

public Task<string> GetAStringAfterSyncProcessing(string processThis) {
    return Task.Run(() => { 
        var processThis2 = processThis + ",";
        var processThis3 = processThis2 + ",";
        var nowImDone = processThis3 + ",";
        return nowImDone;
    });
}

(我也删除了异步lambda,这是不必要的。)

下一页:

所以我想知道我向其他人解释async自动意味着创建一个新的线程,以便该函数只在await或。GetAwaiter()。使用了GetResult()。

不,这绝对不是正确的解释。很难在一个简单的SO回答中给出它的全部细节,但我强烈建议您去阅读MSDN资源,了解async/await的实际含义。人们期望你等待的任何东西都是固有的异步的——这是因为它本身启动了一个线程,或者因为它不需要一个线程来实现异步(例如异步IO)。

 类似资料:
  • 问题内容: 我正在使用Facebook库,其中包含以下代码: 函数定义开头的&是什么意思,以及如何使用这样的库(在一个简单的示例中) 问题答案: 函数名称前的与号表示函数将返回对变量的引用,而不是值。 当您想使用函数查找引用应绑定到哪个变量时,按引用返回很有用。不要使用引用返回来提高性能。引擎将自动自动优化它。仅在有充分的技术理由时才返回引用。

  • 问题内容: 异步在Ajax中意味着什么?以及Ajax如何知道何时在不进行服务器轮询的情况下提取数据? 问题答案: 异步意味着脚本将向服务器发送请求,并继续执行它而无需等待答复。收到答复后,立即触发浏览器事件,该事件进而允许脚本执行关联的操作。 Ajax知道何时从服务器提取数据,因为您告诉它何时进行处理。

  • 问题内容: 如标题所示,如果我使用的是SQL参数,即 我可以直接输入参数值作为输入的直接输入吗? 每当您寻找与转义字符串等有关的内容时,似乎都建议这样做,最终的答案是让参数绑定来完成。但是,这样可以防止注入攻击等吗?还是您仍然需要执行一些服务器端验证? 来自高度注重PHP的背景,它与我身体的每根纤维都背道而驰,直接在查询中输入文本:p 问题答案: 就SQL注入而言,您给出的示例是安全的。参数化查询

  • 据我所知,<code>override</code>关键字声明给定的声明实现了一个基本<code>virtual</code>方法,如果没有找到匹配的基本方法,编译应该失败。 我对< code>final关键字的理解是,它告诉编译器任何类都不能覆盖这个< code >虚拟函数。 那么是多余的吗?它似乎编译得很好。最终传达哪些信息而信息不传达?这种组合的用例是什么?

  • 我正在使用bcryptjs包对密码进行哈希和比较。 下面使用的方法是同步的,并返回一个布尔值。它是可靠的和工作的预期。 下一个示例使用异步方法。我担心的是,由于此版本是异步的,如果服务器上有任何延迟,它可能会在确定的值之前到达语句。这是一个合理的担心,还是我误解了这种类型的异步函数的性质?

  • 问题内容: 当我们创建扩展抽象类的Subclass对象时,抽象类构造函数也会运行。但是我们知道我们不能创建抽象类的对象。因此,这是否意味着即使构造函数无任何例外地完成运行,也不能保证是否创建了对象吗? 问题答案: 因此,这是否意味着即使构造函数无任何例外地完成运行,也不能保证是否创建了对象吗? 简而言之,a 不会创建对象。它只是 初始化 对象的 状态 。创建对象的是操作员。现在,让我们详细了解一下