簡體   English   中英

如何將套接字作為IEnumerable偵聽?

[英]How to listen socket as IEnumerable?

在下面的代碼中,我可以訂閱套接字和接收消息。 消息在某個IO線程中接收。

var subscription = SubscribeToStreamAsync( msg => { } ).Result;
...
Unsubscribe( subscription );

我想在通常的foreach循環中聽這些消息。 因此,我需要在線程中路由消息並將流作為IEnumerable返回。

foreach(var item in GetStreamAsync().Result) {
    if (item == ...) break;
}

我可以通過System.Collections.Concurrent來做嗎?

而且我不想使用System.Reactive

我做了以下方式。

只有我擔心,如果套接字/服務器發生任何問題,線程將凍結。

var collection = new BlockingCollection<object>();
var subscription = SubscribeToStreamAsync().Result;
try {
    var enumerable = collection.GetConsumingEnumerable();
    foreach (var item in enumerable) {
        yield return item;
    }
} finally {
    // foreach or stream is completed
    Unsubscribe( subscription ).Wait();
}

暫無
暫無

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

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