在以下代码中,我可以订阅套接字并接收消息。在某些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
。
答案 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();
}