代码之家  ›  专栏  ›  技术社区  ›  Guerrilla

是否有AsyncMethod()的Typescript版本。Result?

  •  0
  • Guerrilla  · 技术社区  · 6 年前

    在C中,我可以通过调用 Result 财产。

    例如:

    var returnVal = AsyncMethod().Result;
    

    在typescript中,这个等价物是什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Daniel Earwicker    6 年前

    async / await 这与此类似,但并非完全相同。或者至少在浏览器或节点中运行时不存在这种情况。这个 Result 财产在 Task<T> 上课。与typescript中相同的是 Promise<T> ,这是描述Promise对象的类型。

    typescript在运行时只是js。js运行时是积极异步的,因为js被设计为在没有多个线程的情况下工作。相反,要确保任务之间的合作,必须产生一个线程。因此js强烈支持非阻塞api。

    隐藏的副作用 结果 如果还没有结果可用,它将阻塞线程直到结果到达。在js世界中,这将阻止 只有 线程,因此其他代码都无法执行,这很可能会阻止结果到达(除非某个系统调用直接返回了承诺)。

    使用 结果 即使在CLR中也是一个老生常谈的冒险伎俩。它经常导致死锁。最好在CLR中使用 异步 如果你想在任何地方使用它。让异步特性“波动”到最高水平(例如控制器方法或 Main )中。

    而在js(以及ts)中,你别无选择,只能做正确的事情,并且始终保持异步。不太难。如果你有一个函数:

    function f() {
    
        const x = downloadSomething(); // x is a promise, I want the result
    }
    

    而是写:

    async function f() {
    
        const x = await downloadSomething();
    }
    

    现在 f() 也会返回一个承诺,因此异步性“荡漾起来”。但这和你在C_里应该做的完全一样,如果可能的话。