我正在加入一个 C# 项目,其中开发人员大量使用Fibers。在这个项目之前,我什至没有听说过它们,async await
并且以前在我的多任务操作中使用过。今天我问他们为什么用s,主要开发者说他更容易调试。这意味着他知道特定函数来自哪个线程,甚至可以访问堆栈中更高的变量。Threads
BackgroundWorker
Fiber
Fiber
我想知道使用s 与使用 newasync await
和 using s 的优缺点是什么Thread
。
PS:我们使用的是 .Net 4.5
我正在加入一个 C# 项目,其中开发人员大量使用Fibers。在这个项目之前,我什至没有听说过它们,async await
并且以前在我的多任务操作中使用过。今天我问他们为什么用s,主要开发者说他更容易调试。这意味着他知道特定函数来自哪个线程,甚至可以访问堆栈中更高的变量。Threads
BackgroundWorker
Fiber
Fiber
我想知道使用s 与使用 newasync await
和 using s 的优缺点是什么Thread
。
PS:我们使用的是 .Net 4.5
我问他们为什么使用 Fibers,主要开发人员说他更容易调试。这意味着他知道特定函数来自哪个线程,甚至可以访问堆栈中更高的变量。
这听起来很奇怪。将 Task Parallel Library 与 default 以外的自定义调度程序一起使用时ThreadPoolTaskScheduler
,您可以自己决定如何调度您的任务(并且不一定在新线程上)。async-await
另一方面,为您提供了一种方便的方式来进行异步 IO。VS 使您能够像同步执行一样调试异步代码。
为了使用纤程,必须调用非托管 API,因为 .NET 在 BCL 中不提供任何托管包装器。即使是纤维文档也清楚地表明使用它们没有明显的优势:
通常,与精心设计的多线程应用程序相比,纤程没有优势。但是,使用纤程可以更轻松地移植旨在调度自己的线程的应用程序。
我想知道使用 Fibers 与使用新的 async await 和使用 Threads 的优缺点是什么。
使用async-await
为您提供了执行 IO 绑定异步工作的好处,同时感觉您正在同步执行。任务并行库提供了一种在专用线程上调度工作的简单方法,无论是线程池线程还是新线程,同时允许您挂钩到调度这些工作单元的机制。我真的认为今天使用纤维没有任何优势,因为它提供了所有框架。
我认为您应该告诉您的主要开发人员分别使用 Task Parallel Library 和 阅读多线程和异步 IO 工作async-await
。我认为这会让你们所有人的生活更轻松。