我有一个有.我还发现,传递给块的构造函数(为每个发布的项目执行)的那个在逻辑上可以分解为一个昂贵的初始化例程和一个改变函数局部变量的主体。如果我可以将函数重构为一个名为 的类,每个并发操作执行一次初始化(就像 的回调一样),然后允许 TPL Dataflow 确保状态不会一次被多个项目改变,那会更有效率。TransformBlock<int, int>MaxDegreeOfParallelism = 6Func<int, int>TransformBlockStateParallel.ForlocalInit
重构之前:
Func<int, int> original = x => {
// method local variables
// expensive initialization routine to setup locals
// perform action on local variables
// potentially expensive teardown
}
重构后:
public sealed class TransformBlockState<TIn, TOut> : IDisposable
{
// instance state
public TransformBlockState()
{
// expensive initialization routine
}
public TOut Transform(TIn value)
{
// called many times but never concurrently for the same instance
}
public void Dispose()
{
// tear down state
}
}
TPL 数据流库中是否已经存在类似于 (for ) 和 (for ) 回调的内容?localInit.ctorlocalFinallyDispose
我想避免有一个(大量不必要的锁定),我想避免将存储在字段中(因为不能保证不会在多个线程上运行(显然按顺序)或在单个线程上运行多个线程(也许在I / O上全部阻塞))。ConcurrentStack<TransformBlockState>TransformBlockState[ThreadStatic]TaskTask
白猪掌柜的
慕雪6442864
倚天杖
相关分类