【发布时间】:2017-12-27 03:24:44
【问题描述】:
我正在尝试将开源库 DataflowEx 与下一个 Dataflow 声明一起使用。
class RequestClientFlow :Dataflow<string>{
private readonly ILogger _logger;
private readonly Dataflow<string, WebProxy> _webproxyDataflow;
private readonly Dataflow<WebProxy, HttpClient> _httpClientDataflow;
public RequestClientFlow(ILogger logger) : this(DataflowOptions.Default){
_logger = logger;
}
public Dataflow<WebProxy, HttpClient> HttpClientDataflow => _httpClientDataflow;
public RequestClientFlow(DataflowOptions dataflowOptions) : base(dataflowOptions){
_webproxyDataflow = new TransformBlock<string,WebProxy>(s => {
_logger.WriteLine("aaaa");
return new WebProxy();
}).ToDataflow();
_httpClientDataflow = new TransformBlock<WebProxy,HttpClient>(proxy => {
_logger.WriteLine("bbbb");
return new HttpClient();
}).ToDataflow();
_webproxyDataflow.LinkTo(_httpClientDataflow);
RegisterChild(_webproxyDataflow);
RegisterChild(_httpClientDataflow);
}
public override ITargetBlock<string> InputBlock => _webproxyDataflow.InputBlock;
}
当我像消费它时
var requestClientFlow = new RequestClientFlow(this);
requestClientFlow.Post("");
requestClientFlow.Complete();
await requestClientFlow.InputBlock.Completion;
完成并显示我的输出
18:32:54.3773|aaaa 18:32:54.3773|bbbb
1 次通过,0 次失败,0 次跳过,耗时 1.45 秒(xUnit.net 2.3.1 构建 3858)。
但是我的理解来自我也应该能够使用的框架文档
requestClientFlow.Complete();
await requestClientFlow.CompletionTask;
甚至
await requestClientFlow.SignalAndWaitForCompletionAsync();
它没有完成。有人可以帮我理解我做错了什么吗?
【问题讨论】:
标签: c# tpl-dataflow