parçacığı ben olduğunu varsayalım. Sonra ne olacak: işlem bitti ve daha sonra başka bir etkinlik başlatıldı veya belki yeni olay hemen yeni bir iş parçacığına mı atıldı?olay ve
olay ve
cevap
Kabul etmemelisiniz. Olay türüne göre (ethernet_adapter
nesnesinin) bağlı olarak her şey olabilir. o senkronize işlemler, cari işlem devam dek
, yeni olay gündeme edilmeyecektir. o uyumsuz işlem ise
, yeni olay anında artırılacaktır. (Sizin örnekte olduğu gibi)
protected virtual void OnPacketArrived(PacketArrivedEventArgs e)
{
EventHandler<PacketArrivedEventArgs> handler = this.PacketArrived;
if (handler != null)
{
handler(this, e);
}
}
Elveda işleme senkron abone tüm abonelere üzerindeki iç numaralandırma engeller:
Bu, senkronize bir işlemdir. Başka bir iş parçacığı üzerinde gerçekleşecek tek yol, olayı yükselten nesnenin başka bir iş parçacığında ya da işleyicide yapmasıdır. Bunu yapmak için çeşitli yollar vardır, ancak .NET 4.
Kullanılıyorsa, genellikle System.Threading.Tasks.Task
kullanılması tercih edilir. Uygulamanızın nasıl davranmasını istediğinizi dikkatlice düşünün. Her paketin yeni bir iş parçacığı üzerinde işlenmesi, paketlerin sırayla işlenmesine neden olabilir. Onları sıraya koymak ve bu noktada onları işlemek için bir arka plan iş parçacığına sahip olmak isteyebilirsiniz. Veya hiç bir şey yapmanıza gerek olmayabilir. followes olarak
Eğer ThreadPool'da bütün görevi sıraya ekleyebilirsiniz. Her iş parçacığı için görev (.net 4.0) oluşturabilir veya .
Söylentilere ethernet_adapter
sınıfında bir yöntem yoktur. FAKAT! ethernet_adapter
, her seferinde farklı bir iş parçacığı üzerinde çağırırsa, OnPacketArrived
numaralı çağrıları engelleyemeyebilir - böylece iki eşzamanlı uzun işlem ve benzerleri elde edersiniz.
Örnek olarak, Socket
uygulamasına bakın: bu, eşzamansız yöntemler, IOCP iş parçacığı üzerinde başlatılacak geri çağırma geri çağrılarına neden olur - IO ThreadPool
'da her seferinde farklı olarak.
Ne tür bir nesne 'ethernet_adapter' nedir? –
@JimMischel bu bir üçüncü parti kitaplık türü 'ICaptureDevice'. Sanırım cevabı aldım. – ren