EventWaitHandle.Set についてはよくわかりません。現在のスレッド内から呼び出され、イベントを待機している別のスレッドがある場合、現在のスレッドはスリープ状態になり、他のスレッドが (できるだけ早く) 実行されるようになりますか?
私のコードの一部では、オブジェクトを「スレッド共有」キューに追加する必要があり、その操作をできるだけ迅速に行う必要があるためです。しかし、そのキューが使用されている他のスレッドでは、速度は「必要ありません」。だから私はこのように進んでいます:
// Speed "not required"
mailThread = new Task(() =>
{
for (; ; )
{
MailMessage mail;
pushMailLockMREvt.WaitOne();
{
if (mails.Count == 0)
{
mail = null;
}
else
{
mail = mails.Dequeue();
}
}
pushMailLockMREvt.Set(); // Does this put current on sleep on lower it's priority??
if (mail != null)
{
try
{
MailClient.Send(mail);
}
catch (Exception exe)
{
}
}
else
{
mailSem.WaitOne();
}
}
});
[...]
// Speed required
var task = new Task(() =>
{
pushMailLockMREvt.WaitOne(); // ASAP please...
{
mails.Enqueue(mailMessage);
if (mails.Count == 1)
{
mailSem.Set();
}
}
pushMailLockMREvt.Set();
});