在Monotouch中下载多个文件的推荐模式(异步/多线程)

本文关键字:模式 异步 多线程 Monotouch 下载 文件 | 更新日期: 2023-09-27 17:53:52

我有一个MT应用程序,可以从互联网下载内容(例如-大量图像- 10K到5MB)。一个下载会话可以代表千兆字节的数据。我已经将下载包在Parallel中。ForEach循环,这工作,但似乎不使用任何超过一个线程在设备上下载(我希望至少两个,以减少下载时间)。

注意:平行。ForEach 在模拟器中创建多个线程。我是否应该将所有下载作为任务扔到线程池中?我应该启动自己的队列和线程并绕过线程池吗?我知道线程池的大小与设备相匹配,所以这可能不是最好的选择。

在Monotouch中下载多个文件的推荐模式(异步/多线程)

当涉及到IO时,只有应用程序开发人员知道他想要多少并行性。不要依赖TPL——它对IO一无所知。

通过手动启动正确数量的任务,使用具有精确并行度的PLINQ或使用异步IO(无线程)来创建适当数量的IO并行性。

您是否通过HTTP下载?我发现WebClient类对于你所描述的东西类型工作得很好。

类似:

WebClient client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync("http://stackoverflow.com", "test.txt");
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
    //file finished downloading
}

这样就不需要自己管理线程了。

如果你想马上从文件中读取数据你可以使用

DownloadDataAsync

并自己保存文件