【发布时间】:2015-02-24 23:26:28
【问题描述】:
我对框架 4.0 的 ActionBlock 实现感兴趣,因为框架 4.0 似乎不支持 TPL.Dataflow。
更具体地说,我对接收 Func
我考虑过使用响应式扩展来实现它,但我不知道该怎么做。考虑过创建 Subject
public class ActionBlock<TInput>
{
private readonly TaskCompletionSource<object> mCompletion = new TaskCompletionSource<object>();
private readonly Subject<TInput> mQueue = new Subject<TInput>();
public ActionBlock(Func<TInput, Task> action)
{
var observable =
from item in mQueue
from _ in action(item).ToObservable()
select _;
observable.Subscribe(x => { },
OnComplete);
}
private void OnComplete()
{
mCompletion.SetResult(null);
}
public void Post(TInput input)
{
mQueue.OnNext(input);
}
public Task Completion
{
get
{
return mCompletion.Task;
}
}
public void Complete()
{
mQueue.OnCompleted();
}
}
我想也许可以使用 EventLoopScheduler,但我不确定它是否适合这里,因为这是异步的。
有什么想法吗?
【问题讨论】:
标签: c# system.reactive tpl-dataflow