我正在加入一个C#项目,开发人员正在大量使用Fibers。在此项目之前,我甚至没有听说过它们,以前曾使用async await
和Threads
以及BackgroundWorker
来处理我的多任务操作。今天我问他们为什么使用Fiber
,主要的开发人员说他更容易调试。这意味着他知道特定函数来自哪个线程,甚至可以访问堆栈中更高的变量。
我想知道使用Fiber
s与使用新async await
和使用Thread
s有什么优缺点。
PS:我们正在使用.Net 4.5
答案 0 :(得分:16)
我问他们为什么他们使用Fibers而主要的开发者说 他调试起来比较容易。意思是他知道哪个线程了 特定功能来自甚至可以访问变量 堆栈中更高。
这听起来完全是奇特的。将任务并行库与默认ThreadPoolTaskScheduler
以外的自定义调度程序一起使用时,您可以自己决定如何安排任务(并且它不一定在新线程上)。另一方面,async-await
为您提供了一种执行异步IO的便捷方式。 VS使您能够像使用同步执行一样调试异步代码。
为了使用光纤,必须调用非托管API,因为.NET没有在BCL中提供任何托管包装。 Even the docs of fibers clearly say there isn't a clear advantage to using them:
通常,纤维不具备优于精心设计的优势 多线程应用程序。但是,使用光纤可以更容易 设计用于安排自己的线程的端口应用程序。
我想知道使用的优点和缺点是什么 光纤与使用新的异步等待并使用线程。
使用async-await
可以让您在执行IO绑定异步工作的同时感觉您正在同步执行。任务并行库提供了一种简单的方法来调度专用线程上的工作,无论是线程池线程还是新线程,同时允许您连接到调度这些工作单元的机制。我认为今天使用光纤没有任何优势,所有框架都必须提供。
我认为你应该告诉你的主开发人员分别使用任务并行库和async-await
来阅读多线程和异步IO工作。我认为这会让所有人的生活更轻松。