gpt4 book ai didi

c# - .NET 线程像 Node.js/V8?

转载 作者:太空狗 更新时间:2023-10-29 23:01:03 33 4
gpt4 key购买 nike

在喝 Node.js koolaid 的时候,我已经离开 .NET 桌面编程一段时间了。我发现 Node.js 的某些部分很容易使用。特别是,我喜欢线程模型的简单性,并且我可以享受多线程应用程序的一些好处,而只需编写代码来跟踪单个线程。

现在,我需要在 .NET 中编写一个多线程应用程序,我突然想到我没有理由不能使用类似的 threading model that is used to build Node.js applications .特别是,我想:

  • 使用回调参数调用长时间运行的函数。 (该函数将在池中的线​​程上执行。也许在新线程上调用函数的简单包装函数就足够了?)
  • 让那些回调函数调用在“主”线程上运行以进行处理
  • 维护此“主”线程访问的所有对象的自动同步,因此锁定不是问题

这种线程模型的框架是否已经存在于 .NET 应用程序中或用于 .NET 应用程序?如果没有,是否有 .NET 的某些部分已经支持或处理我正在寻找的某些功能?

最佳答案

正如其他人所提到的,async/await是 .NET 的绝佳选择。特别是:

  • Task/Task<T>/TaskCompletionSource<T> are analogous to JavaScript 的 Deferred/Promise/Future .
  • pretty easy使用 .NET 风格的延续来创建 JavaScript 风格的延续,但在大多数情况下您不需要它们。
  • 没有等同于async 的JavaScript/await . async允许您编写方法,就好像它们是同步的一样,并且在引擎盖下,只要有 await ,它就会将它们分解为延续。 .所以你不必使用连续传递样式。
  • 对于后台线程上的操作,最好的选择是 Task.Run .但是,.NET 的标准模式是让后台操作计算并返回一个单个值,而不是与主线程进行连续的双向消息传递。
  • 如果您确实需要异步数据“流”,您应该使用TPL Dataflow。或 Rx .这是与 JS 有很大不同的地方。

我建议您从我的 async / await intro post 开始.

关于c# - .NET 线程像 Node.js/V8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12574825/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com