组调度程序.在同一函数中调用
本文关键字:函数 调用 调度程序 | 更新日期: 2023-09-27 18:29:17
如何对多个Dispatcher进行分组。调用并等待一个组完成后再运行以下组?
以下面的例子为例,第一组创建两个并发运行的线程。在两个线程都完成之后,第二组线程开始,依此类推。
private void FooMethod()
{
// First group
dispatcher.Invoke(new FooDelegate(Foo), cmd1A);
dispatcher.Invoke(new FooDelegate(Foo), cmd1B);
// Second group
dispatcher.Invoke(new FooDelegate(Foo), cmd2A);
dispatcher.Invoke(new FooDelegate(Foo), cmd2B);
// Third group
dispatcher.Invoke(new FooDelegate(Foo), cmd3A);
dispatcher.Invoke(new FooDelegate(Foo), cmd3B);
....
}
您可以在带有队列的调度器周围创建一个包装类来处理组。代码可能很混乱,但它应该提供大致的想法:
public class DispatcherGroup
{
private List<Action> _delegates;
private List<object[]> _parameters;
private ManualResetEvent _isFinished;
public void Add(Action toInvoke, params object[] parameters)
{
_delegates.Add(toInvoke);
_parameters.Add(parameters);
}
public void Invoke(Dispatcher dispatcher)
{
List<DispatcherOperation> operations = new List<>();
for(int i = 0; i < _delegates.Length; i++)
{
DispatcherOperation operation = dispatcher.BeginInvoke(_delegates[i], _parameters[i]);
operations.Add(operation);
}
// check status of all operations before completion
}
}
public class DispatcherGroupInvoker
{
private Queue<DispatcherGroup> _groups;
public Dispatcher Dispatcher { get;set;}
public void Invoke()
{
while (!_groups.Count != 0)
{
DispatcherGroup group = _groups.Dequeue();
group.Invoke(Dispatcher);
}
}
}