簡體   English   中英

異步WCF調用以保存線程?

[英]Async WCF call to save thread?

另一個SO問題中 ,建議我發送異步網絡請求,而不是在后台線程上發送同步請求。 原因是我不浪費線程。 我試圖了解這是怎么回事。

這是原始方法。 我可以理解這里有兩個線程。 一個是主線程(1),一個是后台線程(Task.Run)(2),該線程進行WCF調用:

在此處輸入圖片說明

這是我建議的方法的草圖。 我試圖了解如何保存線程。 異步WCF調用之后,是否將為異步WCF調用的回調創建另一個線程?

在此處輸入圖片說明

進一步考慮之后,如果不需要回調處理,也許僅使用一個線程?

在WPF客戶端中,您的客戶端中某處可能有一個OnClick ,用於檢查客戶端是否被單擊的線程在哪里?

操作系統本身的答案是檢查是否單擊,然后將消息傳遞到消息泵,消息泵依次調用您的功能。 WCF函數的回調就是這樣,操作系統本身正在偵聽答復消息,當它收到消息時,它將發送一個信號,該信號將在線程池中找到一個空閑線程並在那時執行回調。

同步保持線程與讓回調方法最后生成線程之間的主要區別在於,線程池是一個池 當線程池中的線程完成其工作時,它不會被銷毀,它會等待一會兒,以查看是否有更多工作可以完成, 並且可以重復使用它來進行新工作。

所以這兩個選擇是

  • 有1個線程坐在那里,等待其他任何等待該功能解除阻塞的工作(同步+線程)
  • 當OS告訴我們顯示了我們在哪里等待的信息時,請重用一個已經完成工作的現有線程(如果沒有正在等待的線程,或者在ThreadPool.GetMaxThreads()以下,則產生一個新ThreadPool.GetMaxThreads() ,以完成簡短的任務處理回調,然后讓線程回到池中為其他回調做其他工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM