我知道Asycronous Delegates用于在.NET中实现回调功能。
我想知道
答案 0 :(得分:1)
回答你的第一个问题(如果我理解正确的话),答案是肯定的:我认为你正在寻找AsyncOperation
类,它可以使用它来处理报告进度和完成的事件回到调用线程Post
和PostOperationCompleted
方法。这就是BackgroundWorker
正在做的事情。
private AsyncOperation asyncOperation;
public void DoSomethingAsync()
{
this.asyncOperation = AsyncOperationManager.CreateOperation(null);
ThreadPool.QueueUserWorkItem(s => this.DoSomethingImpl());
}
private void DoSomethingImpl()
{
// report progress
this.asyncOperation.Post(new SendOrPostCallback(...), null);
// report complete
this.asyncOperation.PostOperationCompleted(new SendOrPostCallback(...), null);
}
答案 1 :(得分:1)
回调已经在线程池线程上进行,它是.NET的默认设置。在你自己创建的Thread上制作一个会很尴尬。 BackgroundWorker的工作线程也来自线程池。
除了可用的Windows资源之外,您可以使用的BGW数量没有基本上限。但是,线程池管理器不会让它们全部同时运行,它会尝试确保CPU中没有与核心一样多的活动线程。只有当线程在合理的时间内没有完成时才允许运行更多的线程,直到ThreadPool.SetMaxThreads()设置的限制。你以某种方式射击你的脚的几率大致与你创建的线程数呈二次方式。
答案 2 :(得分:0)
BackgroundWorker是使用异步调用的委托实现的。异步调用的委托的目标方法在线程池的线程上执行。