Для чего этот конструктор: Конструктор ActionBlock<TInput> (Func<TInput, Task>)
Ранее я использовал ActionBlock через другой конструктор:
ActionBlock<TInput> Constructor (Action<TInput>)
Но для той, которая в заголовке, с возвращаемым типом Task, я не уверен, что ActionBlock делает с возвращенной Task. Я полагаю, что это как-то для ожидания асинхронного делегата, предоставленного в конструктор? Могу ли я получить это?
1 ответ
Решение
Хорошо, я должен был догадаться, что это для обеспечения асинхронного делегата. Должно быть, я был немного незнаком с синтаксисом для этого. Вот пример одного такого делегата:
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);
}
});
Так что делегат async url => можно сказать, что имеет тип Func<String, Task>
,
Пример взят из: http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/01/28/tpl-dataflow-walkthrough-part-5.aspx