排队异步操作?

时间:2011-02-08 13:46:01

标签: multithreading c#-4.0 asynchronous queue

我正在使用提供异步机制的c#COM库(实际上它是由我的客户强加的PDFCreator)。 将doc文件转换为PDF文件需要两件事:

  • 启动转化的PrintFile方法
  • 一个ready事件表示转换已完成

[编辑]:没有异步模式的Begin / End方法。我必须启动printfile方法,并等待事件被引发

当我只有一个要转换的文件时,这没关系,但由于这种异步模式,我正在努力批量转换多个文件。

如何管理要转换的文件队列?

我希望我的应用程序(一个WPF)简单地“排队”要转换的文件....然后我的工作对象逐个出列文件,确保一次只能进行一次转换。

请注意我正在使用C#4,我希望(因为我正在学习)使用任务,如果这是一个优势。

1 个答案:

答案 0 :(得分:0)

如果PDFCreator公开了基于APM的接口(即BeginFoo / EndFoo方法),那么您可以将这些方法包装在任务中:

Task<int> bytesRead = Task<int>.Factory.FromAsync( 
    stream.BeginRead, stream.EndRead, buffer, 0, buffer.Length, null);  

这里有一篇文章:http://blogs.msdn.com/b/pfxteam/archive/2009/06/09/9716439.aspx更详细地解释了这一点。

一旦你有了一组任务,你就可以开始通过自定义TaskScheduler或默认任务来排队它们: (http://msdn.microsoft.com/en-us/library/dd997402.aspx),看起来好像可以在场景中使用默认任务调度程序。

task.Start()

注意:如果您希望这些任务在完成后通知用户界面,您可以使用延续(http://msdn.microsoft.com/en-us/library/dd270696.aspx),该通知可以通知任务完成后的UI。请注意,要回到UI线程,您需要使用SynchronizationContext或Dispatch.BeginInvoke。

相关问题