smw*_*dia 2 .net task-parallel-library async-await c#-5.0 tpl-dataflow
我正在研究TPL数据流.Belwo是官方文件Stephen Toub的两段代码片段.TPL数据流简介(TPLDataflow.docx).但我并没有完全了解它们之间的区别.
顺便说一句,这两个代码片段是来自文档的样本,用于演示目的.他们不完整.
按顺序和同步下载图像
var downloader = new ActionBlock<string>(url =>
{
// Download returns byte[]
byte [] imageData = Download(url);
Process(imageData);
});
downloader.Post("http://msdn.com/concurrency");
downloader.Post("http://blogs.msdn.com/pfxteam");
Run Code Online (Sandbox Code Playgroud)按顺序和异步方式下载映像
var downloader = new ActionBlock<string>(async url =>
{
byte [] imageData = await DownloadAsync(url);
Process(imageData);
});
downloader.Post("http://msdn.com/concurrency ");
downloader.Post("http://blogs.msdn.com/pfxteam");
Run Code Online (Sandbox Code Playgroud)在您的第一个示例中,对于发布的每个数据,ActionBlock将其委托排队到线程池.该Download会阻塞线程池中的线程,然后执行Process该同一线程池中的线程.
在第二个示例中,对于发布的每个数据,ActionBlock将其委托排队到线程池.该await会asynchronusly等待下载,因此线程池中的线程在下载时返回线程池.下载完成后,方法的其余部分将排队到线程池,并将Process在线程池线程上执行.
因此,在一般情况下,第二个示例更有效.
您可能会发现我的async/ await介绍很有帮助.
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |