我正在编写一个库,用于处理文件下载和处理大量文本等长时间运行的任务。我想多线程化这个库,以便这些任务不会冻结使用它们的应用程序。
您是否有建议以结构化的方式或我应该使用/避免的特定课程?我在考虑使用IAsyncResult
界面:http://msdn.microsoft.com/en-us/library/system.iasyncresult.aspx,或者也许是一些BackgroundWorkers。
答案 0 :(得分:4)
这样这些任务就不会冻结使用它们的应用程序。
如果这是您的目标,您应该研究框架中的标准异步编程模式。
如果您的库的目标是.NET 4,请让它返回Task
和Task<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中使用。