簡體   English   中英

來自單獨線程的WCF響應

[英]WCF response from separate thread

public interface IEventDismiss
{
    [OperationContract]
    [return:MessageParameter(Name="response")]
    [XmlSerializerFormat]
    Response ProcessRequest(Request request);
}

你好,

上面是我在C#中的WCF實現,非常簡單。 但是,當我接收到請求並將其傳遞給另一個線程進行處理以生成響應並最終將該響應發送回時,情況變得有些復雜。

我的算法是:

  1. 獲取請求。
  2. 將其傳遞到單獨的線程上,以放入其他線程的靜態隊列中進行處理。
  3. 一旦線程完成處理,它將響應對象放入靜態隊列。
  4. 在我的ProcessRequest函數中,我有一個while循環,該循環使該響應出隊並將其發送回請求者。

     public Response ProcessRequest (Request request) { bool sWait = true; Response sRes = new Response(); ResponseProcessor.eventIDQueue.Enqueue(request.EventID); while (sWait) { if (ResponseProcessor.repQ.Count > 0) { sRes = ResponseProcessor.repQ.Dequeue(); sWait = false; } } return sRes; } 

現在,在所有人開始燒烤之前,我也意識到這是一種不好的做法,這就是為什么我在這里提出問題,以期尋求更好的方法來做到這一點。 我意識到,使用當前代碼,我會遇到以下問題:

我的while循環可能處於continue循環中,因此如果它們之間沒有sleep(),則會吞噬CPU。 由於異步調用的性質,我的響應隊列可能包含錯誤的響應。

所以我有兩個問題:

  1. 有沒有一種方法可以使while循環進入睡眠狀態,以消除高CPU使用率?
  2. 有一個更好的方法嗎?

首先,這樣做沒有意義。 與其讓當前線程無所事事,而它等待另一個隊列來計算工作(無論如何都要消耗大量的CPU周期), 只需在當前線程中計算響應並將其發送回即可。 通過將其排隊供另一個線程處理,您一無所獲。

您還使用不能被多個線程安全地訪問隊列對象,所以除了是極其低效的,它也受到種族這可能意味着它甚至不能正常工作的條件。

暫無
暫無

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

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