使用异步委托(回调)替换线程(而不是线程池线程)。
我的情况:针对每个客户端生成一个线程/del.beginInvoke()。
根据我的理解:
原因:
- 需要通过回调进行通知/在回调中再次调用委托
- 避免线程开销,(委托使用线程池线程)
- 传递参数(避免转换为对象)并且需要从方法返回值。
如果上述原因不正确,请纠正我。
- 还有其他原因吗?
- 什么场景下我确切需要使用异步委托而线程不能胜任?
3.性能?
例子:
public delegate void SendCallbackType();
SendCallbackType senderdel= new SendCallbackType(SendData);
public void StartSend() // This method Could be Called more than 700 times (Thread per Client)
{
senderdel.BeginInvoke(SendCallback,null);
// (or)
Thread t = new Thread(new ThreadStart(ThreadSend));
t.IsBackground = true;
t.Start();
}
//Async Delegate
void SendData()
{
string data = QueData.DeQueue();
RaiseOnData(data); // Raise to event.
}
void SendCallback(IAsyncResult ar)
{
senderdel.BeginInvoke(SendCallback, null);
}
//Thread
void ThreadSend()
{
while (true)
{
string data = QueData.DeQueue();
RaiseOnData(data); // Raise to event.
}
}
从上述内容来看,哪个选项最好?性能?