我有一个应用程序,它使用EWS2.0 API枚举Inbox文件夹中的文件夹,并将所有附件下载到定义的位置。我在这里提供一个示例代码,以了解我的代码是如何形成的。使用EWS枚举和下载附件时没有问题,而问题是由于它在单个线程中运行,因此枚举和下载10-15个附件需要大约20-30分钟。所以我在想:
我会使用多线程或并行任务,这些都适用于我的情况。
首先,我将计算收件箱内的文件夹总数。然后同样没有。 将创建线程现在在每个文件夹中,我将获得邮件的数量 要枚举,如果可能,再次打开相同数量的线程, 等等。
现有代码的骨架:
static main()
{
try{
DownloadAllAttachmentsInsideInbox();
}
catch(Exception ex)
{
// handling
}
}
private void DownloadAllAttachmentsInsideInbox()
{
//core logic goes here
}
我想要这样的事情。
最后我想说,我不需要任何勺子喂食代码,我只需要任何参考工作链接,以便我可以按照我的用法实现它。
答案 0 :(得分:1)
任务并行库是这种情况下的最佳实践,它可以让您更好地控制自己创建的threads
。我想在你的发言中提出一点
我会计算收件箱内的文件夹总数。然后将创建相同数量的线程
假设文件夹数为50,并且您在4核处理器计算机中创建了50 Tasks
,该计算机只能同时运行4 Tasks
。 TPL能够管理队列中的所有Tasks
并逐个处理。仍然一次创建更多Tasks
会产生一些开销,而这些Tasks
将对资源产生竞争力。您可以根据需要创建Task
以正确使用资源。
System.Environment.ProcessorCount
将帮助您获取您的计算机内核数量,根据此值可以创建任务。要了解有关TPL的更多信息,请参阅以下链接。
http://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx
使用async
和await
下载每个文件夹的邮件。
http://msdn.microsoft.com/en-us/library/hh191443.aspx
不要下载所有文件夹的邮件,只下载当时用户想要的文件夹。例如同步在Outlook
中的工作方式
例如:在展望中
答案 1 :(得分:0)
如果你没有盖上它,线程/任务的数量就会消失。