[英]Share collections between tasks within c# application
我有一個wpf應用程序,其中必須填寫一些Collection:
private async Task FillList()
{
await Task.Factory.StartNew(() =>
{
gdpList = SimpleIoc.Default.GetInstance<ICrud<gdp_groupe>>().GetAll().ToList();
MedecinGDP.AddRange(SimpleIoc.Default.GetInstance<ICrud<vue_medecin>>().GetAll());
CodeGDP_Collection.AddRange(gdpList);
FiltredParticipant.AddRange(SimpleIoc.Default.GetInstance<ICrud<fsign_fiche>>().GetAll());
});
}
問題是我調用此方法后集合仍然為空。 當我更改這種方法(同步方式)時:
private void FillList()
{
gdpList = SimpleIoc.Default.GetInstance<ICrud<gdp_groupe>>().GetAll().ToList();
MedecinGDP.AddRange(SimpleIoc.Default.GetInstance<ICrud<vue_medecin>>().GetAll());
CodeGDP_Collection.AddRange(gdpList);
FiltredParticipant.AddRange(SimpleIoc.Default.GetInstance<ICrud<fsign_fiche>>().GetAll());
}
收藏變得充滿! 所以我需要知道:
如何在不同任務之間共享收藏集?
除了建議鎖定之外,我建議使用線程安全的集合。 現在,當多個線程/任務同時調用Add
方法時,該集合可能變得無效。 對我來說,使用線程安全的集合比使用lock
更容易。 另外,當您的集合被多個類使用時, lock
很難使用。
正如Dave Black在評論中指出的那樣,線程安全集合使用無鎖同步,這必須比獲取鎖更快,這可以從MSDN上閱讀。
您可以使用的集合之一是ConcurrentBag<T>
,可以將其與List<T>
進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.