ConcurrentQueue
Yani, ben hemen her gelen DataTable işlemek gerektiğini belirledi. ConcurrentQueue<T>
düşünmek ... ama WriteQueuedData()
yöntem bir tablo sıradan çıkarma ve veritabanına yazmak için nasıl tanımış görmüyorum. Örneğin
:
public class TableTransporter
{
private ConcurrentQueue<DataTable> tableQueue = new ConcurrentQueue<DataTable>();
public TableTransporter()
{
tableQueue.OnItemQueued += new EventHandler(WriteQueuedData); // no events available
}
public void ExtractData()
{
DataTable table;
// perform data extraction
tableQueue.Enqueue(table);
}
private void WriteQueuedData(object sender, EventArgs e)
{
BulkCopy(e.Table);
}
}
ilk sorum, bir kenara ben ExtractData()
ararsanız Aslında abone için bir olay yok olmasından uyumsuz buna ihtiyacım hepsi bu nedir? İkincisi, ConcurrentQueue<T>
işlevlerinin yolunda eksik olan ve sıraya alınmış nesnelerle eşzamansız olarak çalışmak için bir tür tetikleyici gerektiren bir şey var mı?
Güncelleme Ben sadece bir OnItemQueued olay işleyicisi vardır ConcurrentQueue<T>
gelen bir sınıf elde var. Sonra:
new public void Enqueue (DataTable Table)
{
base.Enqueue(Table);
OnTableQueued(new TableQueuedEventArgs(Table));
}
public void OnTableQueued(TableQueuedEventArgs table)
{
EventHandler<TableQueuedEventArgs> handler = TableQueued;
if (handler != null)
{
handler(this, table);
}
}
Bu uygulama ile ilgili herhangi bir endişeniz var mı? Sorunun Benim anlayış
2 ileti dizisinin olduğunu düşündüm. Ana iş parçacığı temel olarak olayın tetiklenmesini beklerdi. İkinci iş parçacığı, ExtractData() 'için eşzamansız çağrı olarak başlar. Eşzamanlı olmayan geri çağırma işleminde, sadece çıkarma işlemine devam edeceğim. – IAbstract
Aslında, sanırım geriye bende var; ana iş parçacığı, veri yığınlarını sıraya koymalı; Daha sonra, sıralı öğe olayı tetiği aracılığıyla asenkron yazım yöntemine başlayın. – IAbstract