スレッド (ThreadPool スレッドではない) を非同期デリゲート (コールバック) に置き換える。
私のシナリオ: クライアントごとに Thread/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.
}
}
上記から、どのオプションが最適でしょうか。パフォーマンス ?