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