SelectMany在堆分配和线程安全方面表现如何?

时间:2019-06-30 19:38:12

标签: system.reactive reactive-streams

我想将util._解组为消息。每个发射可能包含零个或多个消息,或与先前的发射合并以形成零个或多个消息。所以我正在使用IObservable<Memory<bytes>>(伪代码):

SelectMany

我很好奇这在堆分配和线程安全方面如何工作。如果我理解正确,如果IObservable<Message> messages = bytes.SelectMany(mem => { // copy into another buffer if(somethingWrong) { return Observable.Throw<Message>(new Exception("...")); } else if(gotCompleteMessage) { // QUESTION IS PRIMARILY ABOUT THIS // create message(s) // clear/compact buffer // return new Observable of message(s) } else { return Observable.Empty<Message>(); } }); 是在没有messages的情况下订阅的,这将在观察者上同步调用ObserveOn,并且所有内容都将存在于堆栈中。而且,如果使用OnNext,则消息本身(而不是ObserveOn返回的Observable)将驻留在堆上,并且需要是线程安全的。是吗?

0 个答案:

没有答案