SORU
4 Kasım 2008, Salı


C# tüm konuları tamamlamak için Bekliyor

Tamamlamak için bir grup tüm iş parçacıkları için beklemem gereken bir zaman aşımı ile yazdığım kodda ortak bir kalıp içine çalışan, ben. Zaman aşımı süresi için gerekli olması gerekiyordutümkonuları tamamlamak için, sadece iplik yapıyor.(Timeout) için her iş parçacığı katılın Olası zaman aşımı * numThreads zaman aşımı o zamandan beri işe yaramaz.

Şimdi aşağıdaki gibi bir şey istiyorum:

var threadFinishEvents = new List<EventWaitHandle>();

foreach (DataObject data in dataList)
{
    // Create local variables for the thread delegate
    var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset);
    threadFinishEvents.Add(threadFinish);

    var localData = (DataObject) data.Clone();
    var thread = new Thread(
        delegate()
        {
            DoThreadStuff(localData);
            threadFinish.Set();
        }
    );
    thread.Start();
}

Mutex.WaitAll(threadFinishEvents.ToArray(), timeout);

Ancak, bu tür bir şey için daha basit bir deyim olmalı gibi görünüyor.

CEVAP
4 Kasım 2008, Salı


Ben hala Birleştirme kullanarak daha basit olduğunu düşünüyorum. Beklenen tamamlanma süresi (Artık zaman aşımı) kaydı, bir döngü yapın

if(!thread.Join(End-now))
    throw new NotFinishedInTime();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • Liz Morgan

    Liz Morgan

    4 Aralık 2011
  • Michael Neal

    Michael Neal

    2 Mayıs 2009