将委托与参数一起传递给函数
我想要将任务列表排入队列,然后执行特定事件。代码:
internal class MyClass
{
private Queue<Task> m_taskQueue;
protected MyClass()
{
m_taskQueue = new Queue<Task>();
}
public delegate bool Task(object[] args);
public void EnqueueTask(Task task)
{
m_taskQueue.Enqueue(task);
}
public virtual bool Save()
{
// save by processing work queue
while (m_taskQueue.Count > 0)
{
var task = m_taskQueue.Dequeue();
var workItemResult = task.Invoke();
if (!workItemResult)
{
// give up on a failure
m_taskQueue.Clear();
return false;
}
}
return true;
}
}
每个委托任务可能有自己的参数列表:Task(object[] args)。我的问题是如何将参数传递给任务队列的每个任务?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
好的,现在我们有了更多信息,听起来您的
EnqueueTask
方法实际上应该如下所示:对吗?
对于初学者,我会避免使用
Task
这个名称,它已经是.NET 4核心的一部分,并且将在.NET中非常变得突出5. 正如 Joshua 所说,您基本上已经得到了一个Func
。接下来,您可以保留两个列表 - 一个用于委托,另一个用于值,但仅保留一个
Queue>
会更容易,如下所示:然后你的代码的其余部分将真正“按原样”工作。那里的 lambda 表达式将捕获
values
和task
,因此当您调用Func
时,它会将这些值提供给原始委托。Okay, now we have a bit more information, it sounds like your
EnqueueTask
method should actually look like this:Right?
For starters I would avoid using the name
Task
, which is already part of the core of .NET 4 and will become very prominent in .NET 5. As Joshua said, you've basically got aFunc<object[], bool>
.Next, you could keep two lists - one for the delegates and one for the values, but it's easier just to keep a
Queue<Func<bool>>
like this:Then the rest of your code will actually work "as is". The lambda expression there will capture
values
andtask
, so when you invoke theFunc<bool>
, it will supply those values to the original delegate.如果正确理解您的问题,您只需像正常通话一样传递信息即可。您考虑过使用 Func 吗?您只需将参数传递给
Task.Invoke
即Task.Invoke([此处的参数为*单个*对象数组])
。下面是 Func 类型的示例。
Provided understanding your question correctly you just pass the information like a normal call. Have you considered using Func? You can just pass arguments to the
Task.Invoke
i.e.Task.Invoke([arguments here as a *single* object array])
.Below is an example with the Func type.