将多线程工作到库中的策略是什么?

时间:2011-03-14 23:02:19

标签: c# .net multithreading

我正在编写一个库,用于处理文件下载和处理大量文本等长时间运行的任务。我想多线程化这个库,以便这些任务不会冻结使用它们的应用程序。

您是否有建议以结构化的方式或我应该使用/避免的特定课程?我在考虑使用IAsyncResult界面:http://msdn.microsoft.com/en-us/library/system.iasyncresult.aspx,或者也许是一些BackgroundWorkers。

1 个答案:

答案 0 :(得分:4)

  

这样这些任务就不会冻结使用它们的应用程序。

如果这是您的目标,您应该研究框架中的标准异步编程模式。

如果您的库的目标是.NET 4,请让它返回TaskTask<T>,因为这样可以轻松转换到下一版C#和VB.NET中的异步支持。这也是非常好的添加,允许同步使用而不需要额外的工作,因为用户总是可以这样做:

var result = foo.BarAsync().Result; // Getting Task<T>.Result blocks, effectively making this synchronous

如果您的目标是.NET 3.5或更早版本,则应考虑使用Event-based asynchronous pattern,因为它在APM以外的当前API中使用。