[英]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.