以前、別のコンストラクターを介してActionBlockを使用しました。
ActionBlock<TInput> Constructor (Action<TInput>)
しかし、タイトルの1つで、戻りタイプがTaskの場合、ActionBlockが返されたタスクで何をするのかわかりません。コンストラクターに提供された非同期デリゲートをどういうわけか待っているのだと思いますか?手に入れることはできますか?
以前、別のコンストラクターを介してActionBlockを使用しました。
ActionBlock<TInput> Constructor (Action<TInput>)
しかし、タイトルの1つで、戻りタイプがTaskの場合、ActionBlockが返されたタスクで何をするのかわかりません。コンストラクターに提供された非同期デリゲートをどういうわけか待っているのだと思いますか?手に入れることはできますか?
OK、それは非同期のデリゲートを提供するためのものだと推測すべきでした。その構文に少し慣れていなかったに違いありません。このようなデリゲートの例を次に示します。
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);
}
});
そのため、デリゲートasyncurl=>はタイプが。であると言えますFunc<String, Task>
。
例は次のとおりです:http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/01/28/tpl-dataflow-walkthrough-part-5.aspx