![](/img/trans.png)
[英]await of async WCF call not returning to UI thread and/or blocking UI thread
[英]Async WCF call to save thread?
在另一個SO問題中 ,建議我發送異步網絡請求,而不是在后台線程上發送同步請求。 原因是我不浪費線程。 我試圖了解這是怎么回事。
這是原始方法。 我可以理解這里有兩個線程。 一個是主線程(1),一個是后台線程(Task.Run)(2),該線程進行WCF調用:
這是我建議的方法的草圖。 我試圖了解如何保存線程。 異步WCF調用之后,是否將為異步WCF調用的回調創建另一個線程?
進一步考慮之后,如果不需要回調處理,也許僅使用一個線程?
在WPF客戶端中,您的客戶端中某處可能有一個OnClick
,用於檢查客戶端是否被單擊的線程在哪里?
操作系統本身的答案是檢查是否單擊,然后將消息傳遞到消息泵,消息泵依次調用您的功能。 WCF函數的回調就是這樣,操作系統本身正在偵聽答復消息,當它收到消息時,它將發送一個信號,該信號將在線程池中找到一個空閑線程並在那時執行回調。
同步保持線程與讓回調方法最后生成線程之間的主要區別在於,線程池是一個池 。 當線程池中的線程完成其工作時,它不會被銷毀,它會等待一會兒,以查看是否有更多工作可以完成, 並且可以重復使用它來進行新工作。
所以這兩個選擇是
ThreadPool.GetMaxThreads()
以下,則產生一個新ThreadPool.GetMaxThreads()
,以完成簡短的任務處理回調,然后讓線程回到池中為其他回調做其他工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.