Для чего этот конструктор: Конструктор 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

Другие вопросы по тегам