我使用.net核心和一些並行作品的任務,基本上它就像兩個生產者和一個消費者,兩個任務將寫入數據,消費者將讀取它,在tranditioanal .net代碼中,這些都是由線程完成的,我可以使用Semaphore
或Mutex
或EventHandle
進行線程之間的同步,但是使用基於新任務的代碼時,我發現我不能再使用這些代碼,因爲不能保證異步函數將在await之後在同一個線程上恢復,所以我應該如何同步不同的任務?如何同步任務間共享數據的訪問?
0
A
回答
2
我應該如何同步不同的任務?
既然你有一個生產者/消費者系統,你可以使用BufferBlock<T>
,它作爲一個異步兼容的生產者/消費者隊列。
在更一般的協調原始替代的意義上,參見my AsyncEx.Coordination library。或者你可以build your own。內置到.NET的唯一一個是SemaphoreSlim
。
+0
好的,謝謝,我會嘗試AsyncEx,所有原始同步原語都在System.Threading中,並且在System.Threading.Tasks中沒有添加任何類似的東西,這是否意味着這種情況在TAP中很少見?或者當需要同步時,應該使用舊線程而不是任務? – fluter
+0
你最終需要不太經常與TAP同步。 IMO的這部分原因是由於異步代碼自然而然地起作用,部分原因是由於它通常適用的問題類型。在很多常見的場景中,以前用線程完成的工作現在可以在沒有它的情況下完成。 –
相關問題
- 1. 並行/異步訪問共享數據
- 2. 項目66:同步對共享可變數據的訪問
- 3. 如何訪問不同訪問器之間共享的文件?
- 4. 訪問共享內存同步
- 5. 訪問Pthreads共享數據
- 6. SQL Azure數據同步 - 如何訪問數據同步的API?
- 7. 「同步訪問線程」與「同步共享對象」相反嗎?
- 8. 如何在計劃任務之間共享數據
- 9. 如何在自定義Ant任務之間共享數據?
- 10. 如何同步鎖定共享整數
- 11. 線程池,共享數據,Java同步
- 12. 如何共享訪問protractor.ExpectedConditions
- 13. 我需要在不同類的步驟之間共享數據
- 14. 多線程共享/訪問相同數據的問題
- 15. 同步共享點的工作空間
- 16. 共享共同對象(數據庫連接)的同時芹菜任務
- 17. 同步數據庫訪問
- 18. 同步數據訪問
- 19. 進程間數據共享的問題
- 20. 在SpecFlow中,如何在步驟/功能之間共享數據?
- 21. 轉到:如何同步和共享數據
- 22. 如何同步MsBuild中的項目之間的共享資源
- 23. 線程安全訪問對象之間共享的數據
- 24. 共享業務和數據訪問實體的策略
- 25. 訪問共享數據的服務和活動
- 26. 不同片段之間共享數據
- 27. 在服務間共享數據
- 28. 在AngularJS服務之間共享數據
- 29. 在微服務之間共享數據
- 30. 在Web服務之間共享數據
https://msdn.microsoft.com/library/system.threading.mutex(v=vs.110).aspx –
即'Mutex.OpenExisting',你是什麼意思? – fluter