GRPC 스트림을 통해 관찰 가능 항목을 표시하려고합니다. 내 간단한 코드는 다음과 같습니다Grpc - rx observable 사용
public override async Task Feed(Request request, IServerStreamWriter<Response> responseStream, ServerCallContext context)
{
var result = new Result();
try
{
await Observable.ForEachAsync(async value =>
{
await responseStream.WriteAsync(value);
});
}
catch (Exception ex)
{
Log.Info("Session ended:" + ex);
}
}
나는 다음과 같은 오류가 나타납니다
W:30:59.709715 Grpc.Core.Internal.ServerStreamingServerCallHandler
2 Exception occured in handler. System.ArgumentException: Der Wert liegt außerhalb des erwarteten Bereichs. bei Grpc.Core.Internal.ServerStreamingServerCallHandler
2.d__4.MoveNext() W:30:59.732716 Grpc.Core.Server Exception while handling RPC. System.InvalidOperationException: Der Vorgang ist aufgrund des aktuellen Zustands des Objekts ungültig. bei Grpc.Core.Internal.AsyncCallServer2.SendStatusFromServerAsync(Status status, Metadata trailers, Tuple
2 optionalWrite) bei Grpc.Core.Internal.ServerStreamingServerCallHandler`2.d__4.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei Grpc.Core.Server.d__34.MoveNext()
가 어떻게이 문제를 처리하기 위해 추천을? 같은 스레드에서 ForEachAsync를 처리해야한다고 생각합니다.
rx 대신 동기화 메커니즘으로 BufferBlock으로 이동했습니다. 이것은 스케쥴링과 함께 rx를 사용하는 것보다 더 깔끔하고 쉽습니다. – weismat