Burada benim için göreceli olarak yaygın bir görev var ve bence, bir .NET programcısı için:
Belirli bir tür işlemek için gereken çalışan iş parçacıklarını zamanlamak için .NET ThreadPool'u kullanmak istiyorum. görevler..NET
, ThreadPool'da ve ilişkili temsilci kuyruk yöntemi için imzalar şunlardır:
public class Worker<T> {
public void schedule(T i_task) {
ThreadPool.QueueUserWorkItem(execute, i_task)
}
private void execute(Object o){
T task = (T)o; //What happened to the type safety?
executeTask(task);
}
private void executeTask(T i_task){
//process i_task
}
}
:
public static bool QueueUserWorkItem (
WaitCallback callBack,
Object state
)
public delegate void WaitCallback (Object state)
nedenle, tipik bir jenerik çalışan iş parçacığı sınıfı benzer görünümde olacaktır state
parametresinin türüne dikkat edin? Object
!
.NET ekibinin neden QueueUserWorkItem
yöntemini (veya tüm ThreadPool
sınıfını) jenerik yapmamayı seçmesinin nedeni nedir? Sadece gözden kaçırdıklarına inanamıyorum.
//in the ThreadPool class:
public static bool QueueUserWorkItem<T> (
WaitCallback<T> callBack,
T state
)
public delegate void WaitCallback<T> (T state)
Bu tür güvenli işçi sınıfı (ve çok daha net, IMHO) yapmak istiyorum:
public class Worker<T> {
public void schedule(T i_task) {
ThreadPool.QueueUserWorkItem<T>(execute, i_task)
}
private void execute(T i_task){
//process i_task
}
}
ben eksik gerekir Burada
bunu görmek istiyorum nasıl şey.
:-) geriye uyumluluk kırmamaya seçti nasıl gibi. * * Kullanırken bu bir problemdir.NET ThreadPool sınıfı nedeniyle sınırlı sayıda iplik var mı? IMO, bir iş kuyruğundaki görevlerin kısa olduğunu varsaymak doğaldır. Lütfen detaylandırır mısın? –