【发布时间】:2013-02-17 20:53:07
【问题描述】:
假设我们有一些方法可以做一些大工作。
最初我们不知道有多少个方法(可以是1,也可以是10)。
在代码中是这样的:
public interface IWorker
{
void DoWork(DataContainer data);
}
还有几个实现这个接口的类。 然后我们有实例列表。
List<IWorker> workers = new List<IWorker>();
我想异步运行这些方法。另外,当所有这些都被执行时,我想要一些回调。
public void Callback()
{
Console.WriteLine("everything done");
}
有没有办法在不编写自定义包装器的情况下做到这一点?使用 ThreadPool、Tasks、Parallel?
据我所知,并行阻塞线程,直到任务完成,所以这不是一个预先提供的行为。
创建任务时应该有没有参数的方法,正如我所见,这也不好。
在 ThreadPool 中可以使用方法 QueueUserWorkItem,但使用此方法我不会得到一个“完全完成”回调。
当然,我可以制作自己的包装器,使用 ThreadPool 实现所需的功能,但目标是在不编写此类的情况下实现这一点。
有人可以帮忙吗? 谢谢。
【问题讨论】:
标签: c# multithreading task-parallel-library threadpool