相关疑难解决方法(0)

具有BoundedCapacity的BufferBlock和ActionBlock不使用max DOP

我有这个代码:

var data = new BufferBlock<int>(new DataflowBlockOptions { BoundedCapacity = 1 });

var action = new ActionBlock<int>(async id =>
{
    Console.WriteLine("[{0:T}] #{1}: Start", DateTime.Now, id);

    await Task.Delay(1000);

    Console.WriteLine("[{0:T}] #{1}: End", DateTime.Now, id);
}, new ExecutionDataflowBlockOptions
{
    BoundedCapacity = 1,
    MaxDegreeOfParallelism = -1
});

data.LinkTo(action, new DataflowLinkOptions { PropagateCompletion = true });

for (var id = 1; id <= 3; id++)
{
    Console.WriteLine("[{0:T}] Sending {1}", DateTime.Now, id);
    data.SendAsync(id).Wait();
    Console.WriteLine("[{0:T}] Sending {1} complete", DateTime.Now, id);
}

data.Complete();

Task.WhenAll(data.Completion, action.Completion).Wait();
Run Code Online (Sandbox Code Playgroud)

这段代码得到了我的输出:

[22:31:22] Sending …
Run Code Online (Sandbox Code Playgroud)

.net c# task-parallel-library async-await tpl-dataflow

5
推荐指数
1
解决办法
3011
查看次数