如何将套接字作为IEnumerable侦听?

时间:2019-03-14 11:01:44

标签: c# .net sockets

在以下代码中,我可以订阅套接字并接收消息。在某些IO线程中接收到消息。

DECLARE @StrSQLEmail VARCHAR(8000)
SET @StrSQLEmail = 'SELECT * FROM OPENQUERY(ATOM,''Select * from ATOMS.EMAILS WHERE EMAIL IN (' + @emailOut + ')'')'

我想在通常的var subscription = SubscribeToStreamAsync( msg => { } ).Result; ... Unsubscribe( subscription ); 循环中收听这些消息。因此,我需要在线程中路由消息并以foreach的形式返回流。

IEnumerable

我可以通过foreach(var item in GetStreamAsync().Result) { if (item == ...) break; } 吗?

我不想使用System.Collections.Concurrent

1 个答案:

答案 0 :(得分:0)

我已经按照以下方式做了。

仅怕套接字/服务器发生任何问题,线程才会冻结。

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();
}