【发布时间】:2015-11-09 05:25:07
【问题描述】:
我想实现一个流程,当在我的班级中调用异步方法时,他们将注册到调度程序列表并等待。然后另一个线程运行并执行调度程序列表中的方法,当每个动作完成时,等待将完成,我将返回计算的值。
到目前为止,这是我的代码:
private List<Func<ClassA, ClassB, ResponseBase>> _actionsDict;
public ExecutingScheduler()
{
_actionsDict = new List<Func<ClassA, ClassB, ResponseBase>>();
Task.Factory.StartNew(ExecuteNextTask);
}
private void ExecuteNextTask()
{
while (_actionsDict.Count > 0)
{
// Get first while removing it
var next = _actionsDict[0];
_actionsDict.RemoveAt(0);
// Next line has an error now, how do I call it with the original params as I added it to the list
next();
Task.Delay(2000);
}
}
public async Task<ResponseBase> StartStreamAsync(ClassA classA, ClassB classB)
{
_actionsDict.Add((unit, guid) => StartStream(classA, classB));
// I don't want the first each time, I want to await the same instance as I added
var response = await Task.Run(() => _actionsDict[0](classA, classB));
return response;
}
public async Task<ResponseBase> PrepareStreamAsync(ClassA classA, ClassB classB)
{
_actionsDict.Add((unit, guid) => PrepareStream(classA, classB));
// I don't want the first each time, I want to await the same instance as I added
var response = await Task.Run(() => _actionsDict[0](classA, classB));
return response;
}
所以有两个问题: 1) 如何正确添加到操作列表中,以便以后可以使用参数一个接一个地调用列表中的函数?
2) 如何正确地将执行器方法的返回值传递给原始请求的调用者?
随意提出不同的方法
【问题讨论】:
-
你看过TPL Dataflow吗?
-
@AlexD:您需要一个极其复杂的解决方案,这不禁让我问:您为什么需要这个?您要解决什么实际问题?
-
@StephenCleary 我想他想排队一堆伪
Tasks 然后异步运行它们,然后awaitWhenAll完成。
标签: c# async-await