Как отменить сервер от клиента с помощью grpc в С#? ⇐ C#
-
Гость
Как отменить сервер от клиента с помощью grpc в С#?
Я хочу отменить сервер, созданный на C#, из клиента, написанного на C#. Однако я не буду использовать для этого токены отмены. Я попробовал это сделать с помощью флага. Я написал код, который отправляет true, когда я хочу прекратить отправку false во время работы со стороны клиента. Однако, если значение true на стороне сервера, оно немедленно снова становится ложным и никогда не выходит из цикла while. Я не мог как-то решить эту проблему. можешь мне помочь?
публичное переопределение асинхронных задач StreamArrays (запрос MyRequest, IServerStreamWriter responseStream, контекст ServerCallContext) { пытаться { в то время как (request.IsCancelledRequested == false) { Ответ MyResponse = новый MyResponse(); счетчик++; ответ.данные = счетчик; дождитесь ответаStream.WriteAsync(ответ); ждать Task.Delay(15); } } окончательно { request.IsCancelledRequested = правда; } } //клиент; публичная асинхронная задача SendStreamArray() // для запуска { Запрос MyRequest = новый MyRequest() { IsCancelledRequested = ложь, }; используя var responseStreamArray = client.StreamArrays(запрос); ожидайте foreach (ответ var в responseStreamArray.ResponseStream.ReadAllAsync()) { данные = ответ.данные; } } публичный асинхронный недействительный StopStream() { Запрос MyRequest = новый MyRequest() { IsCancelledRequested = правда, }; используя var responseStreamArray = client.StreamArrays(запрос); }
Я хочу отменить сервер, созданный на C#, из клиента, написанного на C#. Однако я не буду использовать для этого токены отмены. Я попробовал это сделать с помощью флага. Я написал код, который отправляет true, когда я хочу прекратить отправку false во время работы со стороны клиента. Однако, если значение true на стороне сервера, оно немедленно снова становится ложным и никогда не выходит из цикла while. Я не мог как-то решить эту проблему. можешь мне помочь?
публичное переопределение асинхронных задач StreamArrays (запрос MyRequest, IServerStreamWriter responseStream, контекст ServerCallContext) { пытаться { в то время как (request.IsCancelledRequested == false) { Ответ MyResponse = новый MyResponse(); счетчик++; ответ.данные = счетчик; дождитесь ответаStream.WriteAsync(ответ); ждать Task.Delay(15); } } окончательно { request.IsCancelledRequested = правда; } } //клиент; публичная асинхронная задача SendStreamArray() // для запуска { Запрос MyRequest = новый MyRequest() { IsCancelledRequested = ложь, }; используя var responseStreamArray = client.StreamArrays(запрос); ожидайте foreach (ответ var в responseStreamArray.ResponseStream.ReadAllAsync()) { данные = ответ.данные; } } публичный асинхронный недействительный StopStream() { Запрос MyRequest = новый MyRequest() { IsCancelledRequested = правда, }; используя var responseStreamArray = client.StreamArrays(запрос); }
Мобильная версия