2013-01-16 45 views
1

我先前通過另一個構造函數中使用的ActionBlock:這是什麼構造函數:ActionBlock <TInput>構造函數(Func鍵<TInput,任務>)

ActionBlock<TInput> Constructor (Action<TInput>)

但對於一個在標題,有回鍵入Task,我不確定ActionBlock是如何處理返回的Task的。我認爲它以某種方式等待提供給構造函數的異步委託?我可以抓住它嗎?

+1

你有沒有看它的文檔? – Bobson

+1

是的,它非常稀疏,但我現在找到了答案(現在回答我自己的問題)。 – Elliot

回答

3

好的,我應該猜到它是提供一個異步的代表。我一定對這個語法有點不熟悉。以下是一個這樣的代表的示例:

var writer = new ActionBlock<string>(async url => 
{ 
    WebClient wc = new WebClient(); 
    // using IOCP the thread pool worker thread does return to the pool 
    byte[] buffer = await wc.DownloadDataTaskAsync(url); 
    string fileName = Path.GetFileName(url); 

    string name = @"Images\" + fileName; 

    using (Stream srm = File.OpenWrite(name)) 
    { 
     await srm.WriteAsync(buffer, 0, buffer.Length); 
    } 
}); 

所以這代表異步URL =>可以說具有的類型Func<String, Task>

的例子是:http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/01/28/tpl-dataflow-walkthrough-part-5.aspx

+1

是的,這可能是最常見的用法。但任何返回委託的Task都會執行,並且該塊將異步等待它完成。 – svick

相關問題