[英]Start a thread inside an Azure Service Fabric actor?
我知道Service Fabric中的參與者是單線程的。 但是,假設我在actor方法中啟動了一個新線程,那么會發生什么? 即使生成的線程仍在執行,actor也會被停用嗎?
根據文檔 ,當actor一段時間未“使用”時,它會被停用。 在這種情況下,“已使用”是指:
IRemindable.ReceiveReminderAsync
被調用 因此,似乎沒有考慮我啟動的新線程。 但是也許有人可以確認這一點?
究竟。
當您啟動一個新線程時,原始線程(actor)將繼續運行並超出范圍,而跨接線程將繼續運行。 看看會發生什么:
當一個actor收到一個調用時,處理此調用的線程將使用SemaphoreSlim來獲取一個鎖來處理actor對象,如果另一個線程已經獲取了該鎖,則當前線程將等待其釋放,以便一旦釋放就可以繼續。
一旦獲得了鎖,線程將執行並從調用的方法中返回,然后他們釋放鎖以使下一個線程繼續。
當您將新線程作為actor邏輯的一部分進行擴展時,它將僅作為服務進程的一部分運行,但是這里的問題是,一旦離開方法范圍,就不再可以控制該線程了,但是將繼續運行,並且對於actor運行時任務已完成,下一個actor調用將創建另一個線程,並且一切將繼續進行。
該問題將在以下情況下開始:
在可能(需要)另一個線程的情況下,您可以:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.