코더198호
10
2021-04-16 21:40:53 작성 2021-04-16 21:42:22 수정됨
5
116

C# httprequest 요청만 보내고 응답은 기다리고 싶지 않을때의 문의....(고수형들 ㅠㅠ)


안녕하세요. C#을 공부하는 한 학생입니다.


다름이아니라 저는 C# 환경에서 httprequest를 이용하여 요청을 보내고

응답을 기다리지 않고 다음작업을 진행하는 방법을 알고 싶어서 문의드리게 되었습니다.


필요 이유는 딥러닝 강화학습을 탑제한 웹 서비스를 개발하고 있는데

사용자가 버튼을 누른다 -> 강화학습 서버에게  학습을 요청한다. -> 강화학습 과정이 시간이 많이 걸리기 때문에 성공 유무와 상관없이 다음 작업으로 넘어간다.


위와같은 3단계를 구현하고 싶은데 기본적으로 요청을 보내면 timeout 시간 내에서 응답을 기다리고 있기 때문에 이에 대한 해법을 찾지 못하였습니다.


timeout을 짧게 주던가 PostAsync 비동기 호출이라는 개념을 써야할까요? 조언을 받고 싶습니다.


(참고로 요청은 컨트롤러 단에서 보내고 있습니다. 구현하고 싶은 서비스상 프론트 단을 이용하고 싶지 않습니다.. 쓰레드 백그라운드 작업 쪽도 자신이 없습니다...)

0
  • 답변 5

  • 장독깨기
    1k
    2021-04-16 21:51:01 작성 2021-04-16 22:32:04 수정됨

    이럴 경우

    서버 측에서 응답은 즉시 보내고 강화학습은 백그라운드 스레드로 하는게 낫습니다.


      

  • 개나소나고생
    6k
    2021-04-16 22:26:54

    C#에서 제공하는 async 키워드 한번 찾아보세요.

  • 캐티
    2k
    2021-04-16 23:03:19

    그거 구현할때는 Request 완료가 되면 그냥 Abort 를 실행하빈다. 소켓통신에서는 그냥 send 뒤에 disconnect 하면 되지만 닷넷에 객체는 그게 아니저.

    그리고 Response 를 받기 전까지 Abort 과정을 수립하게 되면 소켓통신에서 Connection RESET이 발생하빈다. 글머 서버가 이걸 감지하면 현재 진행중인 태스크를 즉시 파기 할 수도 있어서 안정적인 작동을 하려면 Response 까지도 받아야하빈다.

    connection greaceful 하게 연결을 파기 하지 않는 경우에 연결 여부는 알 수 없지만 전송응답 3 way 에 실패해서 결국에는 연결이 리셋되빈다. 별로 좋은 생각이 아닌것 같스빈다.

  • 코더198호
    10
    2021-04-16 23:23:15

    감사합니다. async의 개념을 잡고나니까 방향을 찾은것 같습니다. 또한 캐티님 의견도 너무 감사합니다.

  • _우리사이
    273
    2021-04-16 23:51:41

    요청쪽을 신경쓰기 보다는

    서버쪽에서 요청을 받고나서 작업을 별도로 담아놓기만 하고 바로 응답을 준다음에

    작업이 끝나고 나면 요청받은 클라이언트에게 알림을 다시 줘서 상태를 갱신시키는게 좋을 것 같아요

    알림 주는건 웹소켓같은걸 사용한다던가 해서요

  • 로그인을 하시면 답변을 등록할 수 있습니다.