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